标签:register 表示 define close 格式 src pac std code
蛙人使用特殊设备潜水。设备中有一个气瓶,分两格:一格装氧气,另一格装氮气。留在水中有时间的限制,在深水中需要大量的氧气和氮气。为完成任务,蛙人必须安排好气瓶。每个气瓶可以用它的质量和含有气体的体积来描述。蛙人要完成任务,就需要特定数量的氧气与氮气。要完成任务他所需带的气瓶的总质量最少是多少呢?
例如:蛙人有下述五个气瓶。每个气瓶表述为:氧气的体积,氮气的体积(以“升”为单位)和气瓶的质量(以“公钱(10g)”为单位):
3 36 120
10 25 129
5 50 250
1 45 130
4 20 119
如果蛙人需要5升氧气和60升氮气,那么他必须带两个总重为249的气瓶(例如说第一个和第二个或第四个和第五个)。
你的任务是:编一条程序,读入蛙人对氧气与氮气的需求,可得气瓶的数量以及它们的描述,计算蛙人完成任务最少需要带多重的气瓶;
备注:给出的数据总能找到完成任务的方法。
第一行是两个整数t,a,用一个空格隔开,1≤t≤21且1≤a≤79,它们表示完成任务需要的氧气与氮气的体积。
第二行有一个整数,1≤n≤1000,表示可用的气瓶数量。接下来n行是对气瓶的描述;
第i+2行包含三个整数ti,ai,wi,用一个空格隔开(1≤ti≤21,1≤ai≤79,1≤wi≤800),分别表示:第i瓶中氧气与氮气的体积,以及这个气瓶的质量。
只有一个整数,表示完成任务最少需要携带气瓶的总质量。
5 60
5
3 36 120
10 25 129
5 50 250
1 45 130
4 20 119
249
还是背包dp模板,多套一重循环即可。
#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #define MAXT 22 #define MAXA 80 #define MAXN 1001 using namespace std; int T, A, n; int t[MAXN], a[MAXN], w[MAXN]; int f[MAXT][MAXA]; int main() { cin >> T >> A >> n; for(register int i = 1; i <= n; i++) { cin >> t[i] >> a[i] >> w[i]; } for(register int i = 0; i <= T; i++) { for(register int j = 0; j <= A; j++) { if(i || j) f[i][j] = 999999999; } } for(register int k = 1; k <= n; k++) { for(register int i = T; i >= 0; i--) { for(register int j = A; j >= 0; j--) { f[min(T, i + t[k])][min(A, j + a[k])] = min(f[i][j] + w[k], f[min(T, i + t[k])][min(A, j + a[k])]); } } } cout << f[T][A]; return 0; }
标签:register 表示 define close 格式 src pac std code
原文地址:https://www.cnblogs.com/kcn999/p/10805109.html