求思路
现在的定义:
dp[i]表示选i个数时大于等于m的最小数之和;
不会转移
01背包会吗?
嗯,所以?
就是01背包,可以超出的那种
f[0]=true;
for(int i=1;i<=n;i++){
for(int j=m-1;j>=0;j--){
f[j+a[i]]=f[j+a[i]]|f[j];
}
}
哦…啥也不会的我沉默了
还有人吗?这个啥意思“|” ?
就是或的意思呀
设当前数为 a_i ,若 j 可以到达,那 j+a_i 肯定也能到达
就这么写?那赋的那个值呀?
f 是 bool 类型啊
嗯嗯,谢谢
桑,咱俩写法好像不太一样
for(int i=1;i<=n;++i){
scanf("%d",&s),cnt+=s;
for(int j=cnt;j>=s;--j)f[j]=f[j-s]|f[j];
}
我是这么写的
也可以