vijos1334 NASA的食物計劃(二維費用的揹包問題)

背景

NASA(美國航空航天局)因爲航天飛機的隔熱瓦等其他安
全技術問題一直大傷腦筋,因此在各方壓力下終止了航天
飛機的歷史,但是此類事情會不會在以後發生,誰也無法
保證,在遇到這類航天問題時,解決方法也許只能讓航天
員出倉維修,但是多次的維修會消耗航天員大量的能量,
因此NASA便想設計一種食品方案,讓體積和承重有限的
條件下多裝載一些高卡路里的食物.

描述

航天飛機的體積有限,當然如果載過重的物品,燃料會浪費很多錢,
每件食品都有各自的體積、質量以及所含卡路里,在告訴你體積
和質量的最大值的情況下,請輸出能達到的食品方案所含卡路里
的最大值,當然每個食品只能使用一次.

格式

輸入格式

第一行 兩個數 體積最大值(<400)和質量最大值(<400)
第二行 一個數 食品總數N(<50).
第三行-第3+N行
每行三個數 體積(<400) 質量(<400) 所含卡路里(<500)

輸出格式

一個數 所能達到的最大卡路里(int範圍內)

樣例1

樣例輸入1[複製]

320 350
4
160 40 120
80 110 240
220 70 310
40 400 220

樣例輸出1[複製]

550

限制

各個測試點1s

提示

很簡單的揹包...

Accepted

 
100
0 1284 ksq2013 C++ 2016-08-16 17:24:13
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int m[55],v[55],c[55],N,V,M,f[444][444];
inline int mx(int a,int b)
{
    if(a>b)return a;
    return b;
}
int main()
{
    scanf("%d%d%d",&V,&M,&N);
    for(int i=1;i<=N;i++)
        scanf("%d%d%d",&v[i],&m[i],&c[i]);
    for(int i=1;i<=N;i++)
        for(int j=V;j>=v[i];j--)
            for(int k=M;k>=m[i];k--)
                f[j][k]=mx(f[j][k],f[j-v[i]][k-m[i]]+c[i]);
    printf("%d\n",f[V][M]);
    return 0;
}
動規是門技術,搜索是門藝術,要擁有好的技術,自然離不開勤加練習。
發佈了119 篇原創文章 · 獲贊 23 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章