原题连接:http://codeforces.com/problemset/problem/864/E

题意:一个人想从大火中带走一些东西。每次他只能带一个,耗时ti ,价值为pi, 当总时间超过di时不能被带走。问他如何按顺序带走物品使价值总和最大。

思路:背包问题。分为取和不取两种情况1.dp[i][j]=max(dp[i-1][j], dp[i-1][j-t]+p), j<d;

                  2.dp[i][j]=max(dp[i-1][j], dp[i][j]);

AC代码:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<vector>
 6 using namespace std;
 7 struct G{
 8     int t,d,v;
 9     int id;
10 }g[105];
11 int dp[105][2005];
12 bool vis[105][2005];
13 bool cmp(G a, G b){
14     return a.d<b.d;
15 }
16 int main()
17 {
18     int n,maxx=0;
19     scanf("%d", &n);
20     memset(dp, 0, sizeof(dp));
21     memset(vis, 0, sizeof(vis));
22     for(int i=1;i<=n;i++){
23         scanf("%d %d %d", &g[i].t, &g[i].d, &g[i].v);
24         g[i].id=i;
25         maxx=max(maxx, g[i].d);
26     }
27     sort(g+1, g+n+1, cmp);
28     int b;
29     for(int i=1;i<=n;i++){
30         b=0;
31         for(int j=0;j<=maxx;j++){
32             if(j>=g[i].t&&j<g[i].d&&dp[i-1][j]<dp[i-1][j-g[i].t]+g[i].v){
33                 dp[i][j]=dp[i-1][j-g[i].t]+g[i].v;
34                 vis[i][j]=1;
35             }
36             else dp[i][j]=dp[i-1][j];
37             if(dp[i][j]>=dp[i][b]) b=j;
38         }
39     }
40     printf("%d\n", dp[n][b]);
41     vector<int> ans;
42     for(int i=n;i;i--){//反推,得到最优取法
43         if(vis[i][b]){
44             ans.push_back(g[i].id);
45             b-=g[i].t;
46         }
47     }
48     printf("%d\n", ans.size());
49     for(int i=ans.size()-1;i>=0;i--) printf("%d ",ans[i]);
50     return 0;
51 }

转载于:https://www.cnblogs.com/MasterSpark/p/7604656.html

Codeforces 864E - Fire(dp)相关推荐

  1. CodeForces 864E Fire dp递推

    CodeForces 864E 题意:有 n 个物品着火,每个物品要花 ti 时间扑灭,且在 >= di 时间后就会坏掉,物品价值为 pi . 问最多可以救回多少价值,物品个数,及救哪些物品(要 ...

  2. Codeforces 864E Fire(背包DP)

    背包DP,决策的时候记一下 jc[i][j]=1 表示第i个物品容量为j的时候要选,输出方案的时候倒推就好了 #include<iostream> #include<cstdlib& ...

  3. Codeforces 833B 题解(DP+线段树)

    题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...

  4. CodeForces - 1497D Genius(dp)

    题目链接:点击查看 题目大意:给出 nnn 个问题,每个问题有如下属性: tagtagtag:标签 ccc:困难度 sss:奖励值 初始时 ci=2ic_i=2^ici​=2i,初始时 IQ=0IQ= ...

  5. D - Yet Another Problem On a Subsequence CodeForces - 1000D (DP,组合数学)

    D - Yet Another Problem On a Subsequence CodeForces - 1000D The sequence of integers a1,a2,-,aka1,a2 ...

  6. Codeforces 480D Parcels(dp)

    题目链接:Codeforces 480D Parcels 题目大意:就是有一个用来堆放货物的板,承重力为S.现在有N件货物,每件货物有到达的时间,运走的时间,以及 重量,承重,存放盈利.如果这件货物能 ...

  7. Codeforces 711c 简单dp

    题目:http://codeforces.com/problemset/problem/711/C 题意: 有n棵树,m(1-m)种颜色,要求划分成k组,每组是连续的同一种颜色的树. 刚开始树有的已经 ...

  8. 【CodeForces】【DP】14E Camels

    CodeForces 14E Camels 题目 ◇题目传送门◆ 题目大意 给定N,TN,TN,T要求求出满足下列条件的填数方案数. 1. 对于第j(2≤j≤N−1)j(2≤j≤N−1)j(2\le ...

  9. Codeforces 629C 简单DP

    [题目链接] http://codeforces.com/problemset/problem/629/C [解题报告] 比赛的时候跑去做D了,这道题只是简单看了看,赛后补题把它补掉.这个题目只要想通 ...

最新文章

  1. 软件工程python就业方向-软件工程实践2019第二次作业
  2. node:ORM、数据模型、脚本创建模型与服务层
  3. 【RK3399Pro学习笔记】十四、ROS中tf坐标系广播与监听的编程实现
  4. 春节期间小游戏同时在线人数最高达2800万人/小时
  5. 多所高校通知:暂缓返校
  6. Flume OOM 处理
  7. 翻译 《Why Indy?》计划进度表
  8. 3d face paper
  9. Spring从入门到入土——Bean的作用域与生命周期
  10. 移动开发者走向全能开发者的五大技能
  11. 大数据工程师简历_大数据工程师简历范本02
  12. COM学习(四)——COM中的数据类型
  13. 【機器學習筆記】xgboost中的min_child_weight參數理解。
  14. C#全局钩子和局部钩子记录
  15. /dev/hda5在linux中表示什么,linux
  16. 国际国内cms系统开源网址大综合
  17. nodejs 游戏框架_Pomelo:网易开源基于 Node.js 的游戏服务端框架
  18. DelayQueue 阻塞队列
  19. 深圳学校积分计算机,深圳积分入户计算机职称 能加分吗,很多人都不知道这个!...
  20. mac 安装java8

热门文章

  1. html5_0_文章_分级_分段
  2. IDEA查看Java源码
  3. 让开发自动化: 利用 Ivy 管理依赖项
  4. XP系统,CMD窗口总是只显示最后一屏的信息,如何能让全部信息都显示出来呢??
  5. Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长
  6. 文件处理-写模式操作文件
  7. Vue_注册登录(短信验证码登录)
  8. zabbix 监控 Esxi
  9. 2. html表单提交servlet出现的乱码问题的解决?
  10. Kindeditor小改动