乍一看,以为是最简单的01背包,但是要注意的是,这个的质量太大啦,但是发现他的价值却是非常少的,所以我们换一种思路
1 正确代码 2 #include<bits/stdc++.h> 3 using namespace std; 4 5 int maxn=100000000; 6 7 int dp[5005];///价值为i所需的最小容量 8 int w[505],val[105]; 9 10 int main() 11 { 12 freopen("in.txt","r",stdin); 13 int n,b; 14 int t; 15 cin>>t; 16 while(t--) 17 { 18 int valsum=0; 19 cin>>n>>b; 20 for(int i=0; i<n; i++) 21 { 22 cin>>w[i]>>val[i]; 23 valsum+=val[i]; 24 } 25 26 for(int i=1; i<=valsum; i++) 27 dp[i]=maxn; 28 29 dp[0]=0; 30 31 for(int i=0; i<n; i++) 32 { 33 for(int j=valsum; j>=val[i]; j--) 34 { 35 dp[j]=min(dp[j],dp[j-val[i]]+w[i]); 36 cout<<dp[j]<<endl; 37 } 38 } 39 int ans=0,u; 40 for(int i=valsum; i>0; i--) 41 { 42 43 if(dp[i]<=b) 44 { 45 s=i; 46 break; 47 } 48 } 49 cout<<ans<<endl; 50 51 } 52 }