背包 有:01背包 逆向背包 多重背包 完全背包 所有的背包都可以根据更新的方向一维实现
amazing?!
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstring> 5 using namespace std; 6 const int N=5e4; 7 int dp[N+7]; 8 int n,W; 9 int main () 10 { 11 while (~scanf ("%d %d",&n,&W)) { 12 memset (dp,0x3f,sizeof(dp)); 13 dp[0]=0; 14 for (int i=1;i<=n;i++) { 15 int cost,value; 16 scanf ("%d %d",&cost,&value); 17 for (int j=N;j>=value;j--) 18 dp[j]=min(dp[j],dp[j-value]+cost); 19 } 20 for (int i=N;i>=0;i--) 21 if (dp[i]<=W) { 22 printf ("%d\n",i); 23 break; 24 } 25 } 26 return 0; 27 }
抓住青春的尾巴。。。