第五届河南省程序设计大赛 G Divideing Jewels

没想到dfs直接过了,以为不能过,感觉会超时

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn=300+5;
int a[maxn],sum,flag;
void dfs(int x)
{
    if(x==(sum/2)) {flag=1;return ;}
    for(int i=10;i>=0;i--)
    {
        if(a[i]>0&&x+i<=(sum/2)){a[i]--;dfs(x+i);}
    }
    if(flag) return;
}
int main()
{
    for(int cc=1;;cc++)
    {
        sum=0;flag=0;
        for(int i=1;i<=10;i++)scanf("%d",&a[i]),sum+=i*a[i];if(!sum)break;
        if(sum&1){printf("#%d:Can't be divided.",cc);printf("\n\n");continue;}
        dfs(0);
        if(flag)printf("#%d:Can be divided.",cc);
        else printf("#%d:Can't be divided.",cc);printf("\n\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wzazzy/article/details/89739257
今日推荐