【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 104750
  • 排名 - 233

最新评论

阅读排行榜

评论排行榜

【问题描述】

潜水员为了潜水要使用特殊的装备。他有一个带2种气体的气缸:一个为氧气,一个为氮气。让潜水员下潜的深度需要各种的数量的氧和氮。潜水员有一定数量的气缸。每个气缸都有重量和气体容量。潜水员为了完成他的工作需要特定数量的氧和氮。他完成工作所需气缸的总重的最低限度的是多少?

例如:潜水员有5个气缸。每行三个数字为:氧,氮的(升)量和气缸的重量:

3 36 120
10 25 129
5 50 250
1 45 130
4 20 119

如果潜水员需要5升的氧和60升的氮则总重最小为249(1,2或者4,5号气缸)。

你的任务就是计算潜水员为了完成他的工作需要的气缸的重量的最低值。

【输入文件】

从文本文件gas.in中读入数据。

第一行有2整数t,a(1<=t<=21,1<=a<=79)。它们表示氧,氮各自需要的量。

第二行为整数n(1<=n<=1000)表示气缸的个数。

此后的n行,每行包括ti,ai,wi(1<=ti<=21,1<=ai<=79,1<=wi<=800)3整数。这些各自是:第i个气缸里的氧和氮的容量及汽缸重量。

【输出文件】

仅一行包含一个整数,为潜水员完成工作所需的气缸的重量总和的最低值。

【输入输出样例】

输入:

5 60
5
3 36 120
10 25 129
5 50 250
1 45 130
4 20 119

输出:

249

【参考程序】:

#include<string.h>
#include
<stdlib.h>
#include
<stdio.h>
int f[30][100],tw[1001],aw[1001],w[1001];
int n,t,a;
int main()
{
        freopen(
"gas.in","r",stdin);
        freopen(
"gas.out","w",stdout);
        scanf(
"%d%d",&t,&a);scanf("%d",&n);
        
for (int i=1;i<=n;i++) scanf("%d%d%d",&tw[i],&aw[i],&w[i]);
        
for (int i=0;i<=t;i++)
            
for (int j=0;j<=a;j++)
               f[i][j]
=0xFFFFFFF;
        f[
0][0]=0;
        
int x,y;
        
for (int k=1;k<=n;k++)
           
for (int i=t;i>=0;i--)
              
for (int j=a;j>=0;j--)
              {
                   x
=i+tw[k];if (x>t) x=t;
                   y
=j+aw[k];if (y>a) y=a;
                   
if (f[i][j]+w[k]<f[x][y])  f[x][y]=f[i][j]+w[k];
               }
        printf(
"%d\n",f[t][a]);
        
return 0;
}
posted on 2009-04-16 14:35 开拓者 阅读(689) 评论(0)  编辑 收藏 引用 所属分类: 动态规划&背包经典习题

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理