华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1687|回复: 9
打印 上一主题 下一主题

P1794 装备运输

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-6-29 18:28:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.luogu.org/problemnew/show/P1794

题目描述
德国放松对英国的进攻后,把矛头指向了东边——苏联。1943年初,东线的战斗进行到白热化阶段。据可靠情报,90余万德国军队在库尔斯克准备发动浩大攻势。因此,朱可夫元帅要求你立即从远东的军工厂运输大量装备支援库尔斯克前线。列车司机告诉你,一趟列车最多可以容纳V体积的武器装备,但是你可能不能装满,因为列车承受不了那么大的重量,一趟列车最多可以承载C单位的重量。同时,军工厂仓库提供给你一份装备清单,详细记录了每件装备的体积、重量和火力。为了有效支援朱可夫元帅,你要找到一种方案,使得总火力值最大。

输入输出格式
输入格式:
第一行:V和G表示最大体积和重量。

第二行:N表示仓库有N件装备。

第三到N + 2行:每行3个数Ti Vi Gi表示各装备的火力值、体积和重量。

输出格式:
输出一个数,表示可能获得的最大火力值。

输入输出样例
输入样例#1:
6 5
4
10 2 2
20 3 2
40 4 3
30 3 3
输出样例#1:
50
说明
对于100%的数据,V,G,N≤500
回复

使用道具 举报

0

主题

17

帖子

82

积分

注册会员

Rank: 2

积分
82
沙发
发表于 2018-7-15 13:25:16 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int f[525][525],t[525],v[525],g[525];
  4. int m,i,j,k,vv,gg;
  5. int main()
  6. {
  7.     cin>>vv>>gg>>m;
  8.     for(i=1;i<=m;i++)
  9.         cin>>t[i]>>v[i]>>g[i];
  10.     for(i=1;i<=m;i++)
  11.         for(j=vv;j>=v[i];j--)
  12.             for(k=gg;k>=g[i];k--)
  13.                 f[j][k]=max(f[j-v[i]][k-g[i]]+t[i],f[j][k]);
  14.     cout<<f[vv][gg];
  15.     return 0;
  16. }

复制代码
回复 支持 反对

使用道具 举报

9

主题

89

帖子

292

积分

华一学生

积分
292
板凳
发表于 2018-7-28 15:35:41 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int maxv,maxm,n;///最大体积 质量,数量
  4. int i,j,k;
  5. const int mx=510;
  6. int t[mx],v[mx],m[mx],dp[mx][mx];
  7. int main()
  8. {
  9.     cin>>maxv>>maxm>>n;
  10.     for (i=1;i<=n;i++) cin>>t[i]>>v[i]>>m[i];
  11.     for (i=1;i<=n;i++)
  12.         for (j=maxv;j>=v[i];j--)
  13.             for (k=maxm;k>=m[i];k--)
  14.                 dp[j][k]=max(dp[j][k],dp[j-v[i]][k-m[i]]+t[i]);
  15.     cout<<dp[maxv][maxm];
  16.     return 0;
  17. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

89

帖子

292

积分

华一学生

积分
292
地板
发表于 2018-7-28 15:36:25 | 只看该作者
二维费用背包
回复 支持 反对

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
5#
发表于 2018-7-29 10:04:42 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int G,V,n;
  4. int w[501],v[501],dp[501][501],t[501];
  5. int main()
  6. {
  7.     cin>>V>>G;
  8.     cin>>n;
  9.     for(int i=1;i<=n;i++)cin>>t[i]>>v[i]>>w[i];
  10.     for(int i=1;i<=n;i++)
  11.         for(int j=V;j>=v[i];j--)
  12.             for(int k=G;k>=w[i];k--)
  13.             dp[j][k]=max(dp[j][k],dp[j-v[i]][k-w[i]]+t[i]);
  14.     cout<<dp[V][G];
  15.     return 0;
  16. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
6#
发表于 2018-7-29 20:15:12 | 只看该作者
  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. int f[501][501];
  5. int V,G;
  6. int n;
  7. int h[501],v[501],m[501];
  8. int main()
  9. {
  10.         scanf("%d%d",&V,&G);
  11.         scanf("%d",&n);
  12.         for(int i=1;i<=n;i++)
  13.         {
  14.                 scanf("%d%d%d",&h[i],&v[i],&m[i]);
  15.         }
  16.         for(int i=1;i<=n;i++)
  17.         {
  18.                 for(int j=V;j>=v[i];j--)
  19.                 {
  20.                         for(int k=G;k>=m[i];k--)
  21.                         {
  22.                                 f[j][k]=max(f[j][k],f[j-v[i]][k-m[i]]+h[i]);
  23.                         }
  24.                 }
  25.         }
  26.         printf("%d",f[V][G]);
  27.         return 0;
  28. }
复制代码

突然发现自己只会写滚动了,好生尴尬啊
回复 支持 反对

使用道具 举报

9

主题

26

帖子

111

积分

禁止发言

积分
111
7#
发表于 2018-8-4 22:50:42 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 01:37 , Processed in 0.160253 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表