#洛谷1156 dp 类背包问题

老久没有自己想出来过dp方程了,,,虽然到最后还是只写了30分,,,

设dp[j]表示最大生命值为i时的最大高度,则对于每个物品,可以选择吃掉或者放上去,即转移为dp[j + p[i].eatLife] 或 dp[j] + p[i].putHeight

注意转移顺序

做这道题目的时候WA了一个世纪,死活找不出原因,最后在codevs上扣下来数据才终于Get到

1.注意dp的初值设定,开始时没注意用的0,后来才发现需要搞成-inf,只把dp[10]设为0

2.注意最大生存时间的计算,开始脑抽的认为吃掉所有垃圾,后来看到数据才意识到有些垃圾可能在扔下来之前就死了,需要判定


#include <cstdio>
#include <cstring>
#include <algorithm> struct data {
int putTime;
int eatLife;
int putHeight;
};
const int inf = 0x3f3f3f3f;
const int maxn = 100 + 10;
data p[maxn];
int d, n;
int dp[2000];
int totTime; bool cmp(data aa, data bb) {
return aa.putTime < bb.putTime;
} int main () {
scanf("%d %d", &d, &n);
for (int i = 1; i <= n; i++) scanf("%d %d %d", &p[i].putTime, &p[i].eatLife, &p[i].putHeight);
memset(dp, 192, sizeof(dp));
dp[10] = 0;
std :: sort(&p[1], &p[n+1], cmp);
for (int i = 1; i <= n; i++) {
for (int j = p[n].putTime; j >= p[i].putTime; j--) {
dp[j + p[i].eatLife] = std :: max(dp[j + p[i].eatLife], dp[j]);
dp[j] += p[i].putHeight;
}
}
for (int i = 10; i <= p[n].putTime; i++) {
if (dp[i] >= d) {
printf("%d", i);
return 0;
}
}
int j = 10;
for (int i = 1; i <= n && j >= p[i].putTime; i++) {
j += p[i].eatLife;
}
printf("%d", j);
return 0;
}

最新文章

  1. php 设置mssql编码 解决乱码问题 mssql_connect charset Utf8
  2. innoDB源码分析--缓冲池
  3. Java_cookie 和session 的区别详解
  4. ruby初步学习中遇到的错误
  5. Android: 启动init.rc 中service的权限问题【转】
  6. 《OD学hadoop》在LINUX下如何将tar压缩文件解压到指定的目录下
  7. .net抓取网页信息 - Jumony框架使用1
  8. BZOJ 1051: [HAOI2006]受欢迎的牛 缩点
  9. C语言使用中的细节问题总结
  10. Yii framework 应用总结小窍门(转)
  11. select、poll、epoll用法
  12. Hibernate详解(5)——Hibernate核心接口和工作原理
  13. android批量文件上传(android批量图片上传)
  14. Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍
  15. java环境配置,试用和基本数据结构
  16. 23 创建ArcMap启动日志
  17. linux 修改hosts文件
  18. ny16 矩形嵌套
  19. .net配置404错误页面
  20. linLINUX中常用操作命令

热门文章

  1. nodejs-安装及卸载
  2. 工具-VS常用快捷键
  3. 洛谷—— P3119 [USACO15JAN]草鉴定Grass Cownoisseur || BZOJ——T 3887: [Usaco2015 Jan]Grass Cownoisseur
  4. spring容器启动过程理解
  5. POJ 2407
  6. 公布项目到NPM
  7. 《C++编程思想》第四章 初始化与清除(原书代码+习题+解答)
  8. scikit-learn系列之如何存储和导入机器学习模型
  9. hdoj--1166--敌兵布阵(线段树)
  10. linux服务器网站安全狗安装教程