标签:
奶牛们想用c_i个高h_i的积木造通天塔,每种积木不能高过a_i,求塔的最大高度
必须按积木的a_i从小到大的顺序递推才能覆盖全部解空间。多重背包问题
1 include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct node 5 { 6 int h,maxn,n; 7 }; 8 node a[516]; 9 int dp[516][40016]; 10 bool is_greater(const node& a,const node& b) 11 { 12 return a.maxn<b.maxn; 13 } 14 int main() 15 { 16 int T; 17 int i,j,k; 18 cin>>T; 19 for(i=0;i<T;i++) 20 { 21 cin>>a[i].h>>a[i].maxn>>a[i].n; 22 } 23 sort(a,a+T,is_greater); 24 //多重背包 25 for(i=0;i<T;i++) 26 { 27 for(j=0;j<=a[i].maxn;j++) 28 { 29 for(k=0;k*a[i].h<=j && k<=a[i].n ;k++) 30 { 31 dp[i+1][j]=max(dp[i+1][j],dp[i][j-k*a[i].h]+k*a[i].h); 32 } 33 } 34 } 35 int result=-1; 36 for(i=1;i<=a[T-1].maxn;i++) 37 { 38 result=max(result,dp[T][i]); 39 } 40 cout<<result<<endl; 41 return 0; 42 } 43
标签:
原文地址:http://www.cnblogs.com/xlsryj/p/4768541.html