[NOIP 模拟]潜水员 DP
2015-10-30 19:02
260 查看
题目
潜水员为了潜水要使用特殊的装备。他有一个带2种气体的气缸:一个为氧气,一个为氮气。让潜水员下潜的深度需要各种的数量的氧和氮。潜水员有一定数量的气缸。每个气缸都有重量和气体容量。潜水员为了完成他的工作需要特定数量的氧和氮。他完成工作所需气缸的总重的最低限度的是多少?例如:潜水员有5个气缸。每行三个数字为:氧,氮的(升)量和气缸的重量:
3 36 120
10 25 129
5 50 250
1 45 130
4 20 119
如果潜水员需要5升的氧和60升的氮则总重最小为249(1,2或者4,5号气缸)。
你的任务就是计算潜水员为了完成他的工作需要的气缸的重量的最低值。
代码
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int m,n,k,a[1005],b[1005],c[1005],dp[105][105],vis[100],maxd(0); int main(){ memset(vis,0,sizeof(vis)); for(int i=0;i<=100;i++){ for(int j=0;j<=100;j++){ dp[i][j]=1<<20; } } scanf("%d%d",&m,&n); scanf("%d",&k); for(int i=1;i<=k;i++){ scanf("%d%d%d",&a[i],&b[i],&c[i]); } int t1,t2; dp[0][0]=0; for(int i=1;i<=k;i++){ for(int j=m;j>=0;j--){ for(int z=n;z>=0;z--){ t1=j+a[i];t2=z+b[i]; if(t1>=m){ t1=m; } if(t2>=n){ t2=n; } dp[t1][t2]=min(dp[t1][t2],dp[j][z]+c[i]); } } } printf("%d",dp[m] ); return 0; }
相关文章推荐
- Tram(转换为最短路模型)
- CF 460B Little Dima and Equation
- C# 生成二维码并且在中间加Logo
- HttpClient_使用httpclient必须知道的参数设置及代码写法、存在的风险
- 9.高级语言中的数据结构和80386寻址方式的关系
- [NOIP 模拟]穿越七色虹 二分答案
- P102、面试题14:调整数组顺序使奇数位于偶数前面
- 句柄handle怎么设计
- POJ 3468 A Simple Problem with Integers(线段树 or 树状数组—区间求和,成段更新)
- utf-8的中文:一个汉字占三个字节长度
- cpu调度
- EditTable-V1.0--续集
- 87. Scramble String (String; DP)
- 华为认证和思科认证,哪一款适合你?
- STL-综合示例
- STL-泛型算法示例
- STL-初始化实验
- STL-访问向量信息
- STL-向量插入/删除
- STL-vector中reserve和resize的区…