113.失恋28天-缝补礼物(多重背包)
2016-04-01 20:26
323 查看
2503 失恋28天-缝补礼物[/b]
时间限制: 1s
空间限制:
32000 KB
题目等级 :
黄金 Gold
题解
查看运行结果
题目描述 Description
话说上回他给女孩送了n件礼物,由于是廉价的所以全部都坏掉了,女孩很在意这些礼物,所以决定自己缝补,但是人生苦短啊,女孩时间有限,她总共有m分钟能去缝补礼物。由于损坏程度不一样所以缝补的时间p也是不一样的,每件礼物呢,都有一个女孩的喜爱程度为w,后面还有一个数字h为这种礼物的件数。女孩想让自己的喜爱程度的和最大,那么请聪明的你帮她算一算!(注意:礼物非常多,不一定都能缝补完,女孩也不用把所有时间都花费)
输入描述 Input
Description
第1行2个整数
m,n
第2行到第n+1行 每行三个整数 p,w,h
输出描述 Output
Description
一个整数s表示最大的喜爱程度
样例输入 Sample
Input
8
2
2 100 4
4 100 2
样例输出 Sample
Output
400
数据范围及提示 Data Size &
Hint
m<=10000
n<=100
p,h,w<=6000
分类标签 Tags 点此展开
动态规划 背包型DP对于多重背包:拆分
代码:
#include
#include
using namespace
std;
int
m,n,p1,w1,h1;
struct Wp{
int p,w,h;
};
int
f[10001];
Wp
wp[600010];
void
input()
{
scanf("%d%d",&m,&n);
int p=n;
for(int
i=1;i<=n;++i)
{
scanf("%d%d%d",&wp[i].p,&wp[i].w,&wp[i].h);
while(wp[i].h!=1)
{
wp[i].h--;
p++;
wp[p].p=wp[i].p;
wp[p].h=1;
wp[p].w=wp[i].w;
}
}
n=p;
}
int main()
{
input();
for(int
i=1;i<=n;++i)
for(int j=m;j>=wp[i].p;--j)
f[j]=max(f[j],f[j-wp[i].p]+wp[i].w);
printf("%d",f[m]);
return 0;
}
相关文章推荐
- C#-get/set和方法重载
- 专题一 Problem C
- libcurl上传文件到服务器的几种方式
- 10.ARM汇编指令集详解
- 0-1整数规划与隐枚举法-感受剪枝的魅力
- iOS 最新版 CocoaPods 的安装流程
- POJ 2251 Dungeon Master(BFS)
- php如何实现上一页下一页的功能 (不是列表页 是内容页)
- DFS-zb的生日
- buptoj:network
- 回归基础系列-快速排序[JAVA]
- 【BZOJ2243】[SDOI2011]染色【树链剖分】【线段树】
- 正则大全
- hdu1166敌兵布阵<树状数组>
- 基于easyui的 增 删 改 查
- ubuntu新建用户与无密码远程登陆
- C++指针【数组、字符串作为函数的参数】
- OpenGL:太阳、地球、月球模型模拟动画
- 回归基础系列-选择排序[JAVA]
- 《Linux操作系统分析》之分析Linux内核创建一个新进程的过程