wikioi-1014 装箱问题
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
做法:
01背包的问题
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; int main() { int i,v,n,j; int a[1001]; cin>>v>>n; for(i=0;i<n;i++)cin>>a[i]; int dp[200001]; memset(dp,0,sizeof(dp)); dp[0]=1; for(i=0;i<n;i++) { for(j=v;j>=0;j--) { if(j>=a[i]) { dp[j]=max(dp[j],dp[j-a[i]]); } } } for(i=v;i>=0;i--) { if(dp[i]) { cout<<v-i<<endl; break; } } return 0; }