题目大意:
一堆石头,能否等分成2份
题目分析:
数据量有点大,我们的做法是将其取6的模。
注意:若为6的倍数,则置为6,若为0,则为0,这是我wa了好多次的原因!
枚举既可,看是否等于sum/2?
也可以使用多重背包,
代码示例
#include <iostream>
using namespace std;
int a[7];
int main()
{
int sum2,half,cn=0,flag;
while(1)
{
sum2=0;
for(int i=1;i<=6;i++)
{
cin >> a[i];
if(a[i]!=0&&a[i]%6==0)
a[i]=6;
else
a[i]%=6;
sum2+=a[i]*i;
}
//cout << sum2 << endl;
if(sum2==0)
break;
cout << "Collection #" << ++cn << ":\n";
flag=0;
if(sum2%2==0)
{
half=sum2/2;
for(int i=0;i<=a[1];i++)
for(int j=0;j<=a[2];j++)
for(int k=0;k<=a[3];k++)
for(int x=0;x<=a[4];x++)
for(int y=0;y<=a[5];y++)
for(int z=0;z<=a[6];z++)
if(flag==0&&(i+2*j+3*k+4*x+5*y+6*z==half))
{
flag=1;
break;
}
}
if(flag)
cout << "Can be divided." << endl;
else
cout << "Can't be divided." << endl;
cout << endl;
}
return 0;
}