堆叠箱子(基础dp)
P1086
时间限制: 1 Sec 内存限制: 128 MB提交: 38 解决: 27
[提交][状态][讨论版][命题人:外部导入]
题目描述
现有N种箱子,每种箱子高度H_i,数量C_i。现选取若干箱子堆成一列,且第i种箱子不能放在高度超过A_i的地方。试求最大叠放高度。
输入
第一行,一个整数,表示箱子种类N。 接下来N行,每行三个整数,表示H_i,A_i,C_i。
输出
一个整数,表示最大高度。
样例输入
3
7 40 3
5 23 8
2 52 6
样例输出
48
提示
N < = 400 , H_i < = 100 , C_i < = 10 , A_i < = 40000
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<vector> using namespace std; int n; int H,C,A; struct BOX { int h,a,c; }box[405]; bool cmp(BOX x,BOX y) { return x.a<y.a; } int main() { cin>>n; int num=1; for(int i=1;i<=n;i++) { cin>>box[i].h>>box[i].a>>box[i].c; } sort(box+1,box+1+n,cmp); bool f[40010]; memset(f,0,sizeof(f)); f[0]=1; int ans=0; for(int i=1;i<=n;i++) { for(int j=1;j<=box[i].c;j++) { for(int k=box[i].a;k>=box[i].h;k--) { if(f[k-box[i].h]) f[k]=1; if(f[k]) ans = max(ans,k); } } } cout<<ans; return 0; }