没想到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;
}