Codeforces 864E - Fire(dp)
原题连接: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)相关推荐
- CodeForces 864E Fire dp递推
CodeForces 864E 题意:有 n 个物品着火,每个物品要花 ti 时间扑灭,且在 >= di 时间后就会坏掉,物品价值为 pi . 问最多可以救回多少价值,物品个数,及救哪些物品(要 ...
- Codeforces 864E Fire(背包DP)
背包DP,决策的时候记一下 jc[i][j]=1 表示第i个物品容量为j的时候要选,输出方案的时候倒推就好了 #include<iostream> #include<cstdlib& ...
- Codeforces 833B 题解(DP+线段树)
题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...
- CodeForces - 1497D Genius(dp)
题目链接:点击查看 题目大意:给出 nnn 个问题,每个问题有如下属性: tagtagtag:标签 ccc:困难度 sss:奖励值 初始时 ci=2ic_i=2^ici=2i,初始时 IQ=0IQ= ...
- 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 ...
- Codeforces 480D Parcels(dp)
题目链接:Codeforces 480D Parcels 题目大意:就是有一个用来堆放货物的板,承重力为S.现在有N件货物,每件货物有到达的时间,运走的时间,以及 重量,承重,存放盈利.如果这件货物能 ...
- Codeforces 711c 简单dp
题目:http://codeforces.com/problemset/problem/711/C 题意: 有n棵树,m(1-m)种颜色,要求划分成k组,每组是连续的同一种颜色的树. 刚开始树有的已经 ...
- 【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 ...
- Codeforces 629C 简单DP
[题目链接] http://codeforces.com/problemset/problem/629/C [解题报告] 比赛的时候跑去做D了,这道题只是简单看了看,赛后补题把它补掉.这个题目只要想通 ...
最新文章
- 软件工程python就业方向-软件工程实践2019第二次作业
- node:ORM、数据模型、脚本创建模型与服务层
- 【RK3399Pro学习笔记】十四、ROS中tf坐标系广播与监听的编程实现
- 春节期间小游戏同时在线人数最高达2800万人/小时
- 多所高校通知:暂缓返校
- Flume OOM 处理
- 翻译 《Why Indy?》计划进度表
- 3d face paper
- Spring从入门到入土——Bean的作用域与生命周期
- 移动开发者走向全能开发者的五大技能
- 大数据工程师简历_大数据工程师简历范本02
- COM学习(四)——COM中的数据类型
- 【機器學習筆記】xgboost中的min_child_weight參數理解。
- C#全局钩子和局部钩子记录
- /dev/hda5在linux中表示什么,linux
- 国际国内cms系统开源网址大综合
- nodejs 游戏框架_Pomelo:网易开源基于 Node.js 的游戏服务端框架
- DelayQueue 阻塞队列
- 深圳学校积分计算机,深圳积分入户计算机职称 能加分吗,很多人都不知道这个!...
- mac 安装java8