
题目P1507 NASA的食物计划题目背景NASA美国航空航天局因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋因此在各方压力下终止了航天飞机的历史但是此类事情会不会在以后发生谁也无法保证。所以在遇到这类航天问题时也许只能让航天员出仓维修。但是过多的维修会消耗航天员大量的能量因此 NASA 便想设计一种食品方案使体积和承重有限的条件下多装载一些高卡路里的食物。题目描述航天飞机的体积有限当然如果载过重的物品燃料会浪费很多钱每件食品都有各自的体积、质量以及所含卡路里。在告诉你体积和质量的最大值的情况下请输出能达到的食品方案所含卡路里的最大值当然每个食品只能使用一次。输入格式第一行2 22个整数分别代表体积最大值H HH和质量最大值T TT。第二行1 11个整数代表食品总数n nn。接下来n nn行每行3 33个数 体积h i h_ihi质量t i t_iti所含卡路里k i k_iki。输出格式一个数表示所能达到的最大卡路里int范围内输入输出样例 #1输入 #1320 350 4 160 40 120 80 110 240 220 70 310 40 400 220输出 #1550说明/提示对于100 % 100\%100%的数据H , T , h i , t i ≤ 400 H,T,h_i,t_i \le 400H,T,hi,ti≤400n ≤ 50 n \le 50n≤50k i ≤ 500 k_i \le 500ki≤500。代码1三维数组#includebits/stdc.husingnamespacestd;constintN5010,M40010;intn,V1,V2,v1,v2,w,f[N][M][M];intmain(){cinV1V2n;//V1体积,V2质量for(inti1;in;i){cinv1v2w;for(intj0;jV1;j)for(intk0;kV2;k){f[i][j][k]f[i-1][j][k];if(v1jv2k)f[i][j][k]max(f[i][j][k],f[i-1][j-v1][k-v2]w);}}coutf[n][V1][V2];return0;}代码2二维数组#includebits/stdc.husingnamespacestd;constintM40010;intn,V1,V2,v1,v2,w,f[M][M];intmain(){cinV1V2n;//V1体积,V2质量for(inti1;in;i){cinv1v2w;for(intjV1;jv1;j--)for(intkV2;kv2;k--){f[j][k]max(f[j][k],f[j-v1][k-v2]w);}}coutf[V1][V2];return0;}结果