洛谷 P1049 装箱问题(01背包)
一道水题,但看到好久没有发博客了,再一看是一道noip普及组t4,就做了。
题目链接
https://www.luogu.org/problemnew/show/P1049
解题思路
一道裸的01背包,注意价值和重量是一个东西,且最后输出剩余的体积。
随随便便二维就AC了,懒得写一维。
AC代码
1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4 #include<cstdio> 5 #include<cstring> 6 #include<cstdlib> 7 #include<queue> 8 #include<set> 9 #include<map> 10 #include<vector> 11 #include<iomanip> 12 #include<ctime> 13 #include<stack> 14 using namespace std; 15 int n,v,w[35],dp[35][20005]; 16 int main() 17 { 18 //freopen("","r",stdin); 19 //freopen("","w",stdout); 20 cin>>v>>n; 21 for(int i=1;i<=n;i++){ 22 cin>>w[i]; 23 } 24 for(int i=1;i<=n;i++){ 25 for(int j=1;j<=v;j++){ 26 if(j<w[i]) dp[i][j]=dp[i-1][j]; 27 else dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+w[i]); 28 } 29 } 30 cout<<v-dp[n][v]; 31 //fclose(stdin); 32 //fclose(stdout); 33 return 0; 34 }
//NOIP2001普及组t4