時間2020年2月12日15:18:20
洛谷P1036 選數
https://www.luogu.com.cn/problem/P1036
不降原則
1 2 3
1 2 4
1 3 4
2 3 4
用dfs函數實現
void dfs(int m, int sum, int startx)
{
//cout << m << " " << sum << endl;
if(m == k)
{
if(isPrime(sum))
{
ans = ans + 1;
}
return;
}
for(int i = startx; i <= n; i++)
{
dfs(m + 1, sum + a[i], i + 1);
}
return;
}
全部代碼:
#include<bits/stdc++.h>
using namespace std;
const int maxl = 100;
const int maxn = 5e6 + 5;
int a[maxl];
int ans = 0;
int n, k;
bool isPrime(int x)
{
bool flag = true;
for(int i = 2; i * i <= x; i++)
{
if(x % i == 0)
{
flag = false;
break;
}
}
return flag;
}
void dfs(int m, int sum, int startx)
{
//cout << m << " " << sum << endl;
if(m == k)
{
if(isPrime(sum))
{
ans = ans + 1;
}
return;
}
for(int i = startx; i <= n; i++)
{
dfs(m + 1, sum + a[i], i + 1);
}
return;
}
int main()
{
scanf("%d %d", &n, &k);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
dfs(0, 0, 1);
printf("%d", ans);
return 0;
}