bzoj1606 / P2925 [USACO08DEC]干草出售Hay For Sale(01背包)
P2925 [USACO08DEC]干草出售Hay For Sale
简化版01背包(连价值都免了)
直接逆推解决
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cctype> 5 #define re register 6 using namespace std; 7 void read(int &x){ 8 char c=getchar();x=0; 9 while(!isdigit(c)) c=getchar(); 10 while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar(); 11 } 12 int n,m,f[50002],a; 13 int main(){ 14 read(n);read(m); f[0]=1; 15 for(re int i=1,j;i<=m;++i){ 16 read(a); 17 for(j=n;j>=a;--j) f[j]|=f[j-a];//在这里相当于f[j]=f[j-a]?1:0; 18 } 19 for(re int i=n;i>=0;--i)//找一遍最大的 20 if(f[i]){printf("%d",i);return 0;} 21 }