背包 有: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 }