從零開始的代碼大神之路——2月(持續一個月更新)

時間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;
}

 

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 3035
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章