洛谷P2347 [NOIP1996 提高组] 砝码称重
题目传送门
好吧这题是水题一个,但是比赛是我犯了一个伞兵错误卡掉了8分……
错在这里:
f[j]|=f[j-w[i]];
这里不可以是=而要是|=,因为如果是=的话,后面是0的值就有可能把前面可以的值覆盖掉,导致少算……洛谷的数据太水了,这点细节反映不出来,但是遇到hack还是会被卡分……
AC代码:
#include<bits/stdc++.h>
using namespace std;
int w[7]={0,1,2,3,5,10,20};
int num[10],f[1005],ans;
int main()
{
for(int i=1;i<=6;i++)
{
scanf("%d",&num[i]);
}
f[0]=1;
for(int i=1;i<=6;i++)
{
for(int k=1;k<=num[i];k++)
{
for(int j=1005-1;j>=w[i];j--)
{
f[j]|=f[j-w[i]];
}
}
}
for(int i=1;i<1005;i++)
{
ans+=f[i];
}
printf("Total=%d",ans);
return 0;
} ```