2017/9/26Codeforces E题

我终于打了一场cf了,可惜我太蒟蒻,6题才出了4题,反思一下,订正一下吧
E题面:http://codeforces.com/contest/864/problem/E
E题大意:
Polycarp家着火了,现在Polycarp要把一些东西救出来,每样东西都有三个值ti(救出来所花的时间),di(物品被烧毁的时间,只有物品在被烧毁前救出来才有价值),pi(物品价值)
输入:一个N(1≤N≤100),之后N行每行三个数ti(1≤ti≤20),di(1≤di≤2000),pi(1≤pi≤20)
输出:第一行是最大救出的价值,第二行输出被救出的物品数量,第三行按被救顺序输出每个物品的编号(编号为物品输入顺序),若有多种方案则输出一种

样例输入1
3
3 7 4
2 6 5
3 7 6
样例输出1
11
2
2 3
样例输入2
2
5 6 1
3 3 5
样例输出2
1
1
1

题目不难,想一想O(n^2)能过,刚开始看想个背包,然后呢发现,好像就是啊,只是物品会被烧毁,那么就大力DP一发吧
既然是想O(n^2)的转移,那么一维转移物品一维用作时间
f[i]表示到第i的时间所获取的价值最大值
状态转移

f[i]=max(f[i−t[a]]+p[a])(1≤a≤N且d[a]>f[i])

f[i]=max(f[i-t[a]]+p[a])(1≤a≤N且d[a]>f[i])
是不是感觉很easy?
然而,要怎么样放才能保证转移不因为被烧毁时间而挂掉呢
由于我偷懒,所以在考场上我按di-ti排序,然后成功WA
为什么呢?因为有这样的情况:
p1=8 , d1=10,p1=10
p2=1 , d2=4 , p2=10
答案是20我的程序输出10
那怎么办呢?
直接按di排序就好啦
为什么呢?
假设两个物品a,b能同时救出,那么一定满足这个情况

若a被摧毁时间比b早

若a被摧毁时间比b晚

(因为保证能同时存在所以b被摧毁的时间一定在a、b被救出来之后)
然后就好啦
放一下代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline void read(int&x)
{char cu=getchar();x=0;bool fla=0;while(cu<'0'||cu>'9'){if(cu=='-')fla=1;cu=getchar();}while('0'<=cu&&cu<='9')x=x*10+cu-'0',cu=getchar();if(fla)x=-x;
}
void printe(const int x)
{if(x>=10)printe(x/10);putchar(x%10+'0');
}
inline void print(const int x)
{if(x<0)putchar('-'),printe(-x);else printe(x);
}
int N;
struct things
{int t,d,p,ended,id;//在ended时刻之前救该物品才有效,id即编号
}t[101];
int cmp(things x,things y)
{return x.d<y.d;
}
int dp[2001],from[2001][2001],ans=-1,wz;
int main()
{memset(dp,-1,sizeof(dp));read(N);for(int i=1;i<=N;i++)read(t[i].t),read(t[i].d),read(t[i].p),t[i].id=i;sort(t+1,t+N+1,cmp);//排序,尤其注意 for(int i=1;i<=N;i++)t[i].ended=t[i].d-t[i].t;//算出ended dp[0]=0;for(int i=1;i<=N;i++){if(t[i].ended<=0)continue;//特判 for(int j=t[i].ended-1;j>=0;j--){if(dp[j]==-1)continue;//特判 if(dp[j]+t[i].p>dp[j+t[i].t]){dp[j+t[i].t]=dp[j]+t[i].p;//转移 memcpy(from[j+t[i].t],from[j],sizeof(from[j+t[i].t])); from[j+t[i].t][++from[j+t[i].t][0]]=t[i].id;//更新 }}}for(int i=0;i<=2000;i++)//找出答案 if(dp[i]>ans){ans=dp[i];wz=i;}print(ans);putchar('\n');print(from[wz][0]);putchar('\n');if(from[wz][0]!=0){print(from[wz][1]);for(int i=2;i<=from[wz][0];i++)putchar(' '),print(from[wz][i]);}return 0;
}

2017/9/26Codeforces E题相关推荐

  1. python 内推_网易有道2017内推编程题 洗牌(python)

    本文实例为大家分享了网易有道2017内推编程题:洗牌,供大家参考,具体内容如下 ''' [编程题] 洗牌 时间限制:1秒 空间限制:32768K 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程 ...

  2. 有道python网课怎么样-网易有道2017内推编程题 洗牌(python)

    本文实例为大家分享了网易有道2017内推编程题:洗牌,供大家参考,具体内容如下 ''' [编程题] 洗牌 时间限制:1秒 空间限制:32768K 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程 ...

  3. [蓝桥杯][2017年第八届真题]包子凑数(解题报告)

    问题 1886: [蓝桥杯][2017年第八届真题]包子凑数 时间限制: 1Sec 内存限制: 128MB 提交: 406 解决: 118 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家 ...

  4. 网易有道2017内推编程题

    网易有道2017内推编程题 两道题,都只要找到了规律就比较好些,然后就是一些细节处理! 题目一 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌,从上到下依次是第1张,第2 ...

  5. 不属于微型计算机特点的是什么,2017计算机应用基础模拟题及答案

    2017计算机应用基础模拟题及答案 一.选择题: 1.过程控制的特点是( D ) A.计算量大,数值范围广 B.数据输入输出量大,计算相对简单 C.进行大量的图形交互操作 D.具有良好的实时性和高可靠 ...

  6. 2017数学建模b题回顾_12月热门文章和2017年回顾

    2017数学建模b题回顾 在12月,我们在Opensource.com上总结了激动人心的开源社区内容年. 该网站吸引了637,090位唯一身份访问者,该月产生了1,072,932页浏览量. 我们发表了 ...

  7. 2017年上海市计算机一级题库,2017年计算机一级题库及答案

    2017年计算机一级题库及答案 计算机系统实现自动维护和诊断的技术.实施维护诊断自动化的主要软件为功能检查程序和自动诊断程序.下面是小编整理的关于计算机一级题库及答案,欢迎大家参考! 1.假设给定一个 ...

  8. 【CTF整理】Who are you (2017强网杯web题)

    [CTF整理]Who are you (2017强网杯web题) 别人思路总结: 0x01 初探 打开网页就是一句"Sorry. You have no permissions." ...

  9. 微型计算机属于数字模拟混合计算机,2017年计算机基础题模拟试题「附答案」...

    2017年计算机基础题模拟试题「附答案」 一.单选题 1.计算机中能直接被CPU存取的信息是存放在___A____ 中. A.内存 B.光盘 C.硬盘 D.软盘 2.D/A转换器的功能是将___A__ ...

最新文章

  1. 计算机专业知识考试 一,计算机专业知识试题(事业单位计算机专业知识考试试卷)(1)...
  2. 垃圾回收(GC)浅谈
  3. return view前端怎么获取_前端判断上传图片格式
  4. 关于 ASP.NET 内存缓存你需要知道的 10 点
  5. 使用执行程序和ThreadPoolExecutor的Java线程池示例
  6. 使用between and查找时间范围时的日期边界问题
  7. asterisk积累命令
  8. linux usb全自动安装失败,关于使用universal usb installer 安装 archlinux 失败的问题
  9. 指定JDK版本运行Tomcat
  10. Restrictions
  11. python 3d游戏编程入门_用python写游戏 - 从入门到精通16
  12. 加载中动画(gif)
  13. 和风OUC-Systeminfo获取客户端基本系统信息
  14. ESP8266(WeMos D1 R1)+DHT22采集温湿度
  15. 万能设配器代码 带加载更多
  16. d2l.Vocab(sentences, min_freq=5, reserved_tokens=[‘<pad>‘, ‘<mask>‘, ‘<cls>‘, ‘<sep>‘]) 参数讲解
  17. 原生javascript实现星级评价功能
  18. 服务器系统的功能,操作系统服务器主要功能
  19. 亚马逊广告授权流程说明
  20. matlab程序模拟微信抢红包,js仿微信抢红包功能

热门文章

  1. Hive的基本操作-分组和多表连接
  2. 字节输出流写多个字节的方法
  3. 文件上传之传统方式上传代码回顾
  4. php arcode svg,在react中使用svg的各种方法总结(附代码)
  5. JAVA BIO与NIO、AIO的区别
  6. cJSON_译(C中的超轻量级JSON解析器)
  7. 分贝(BD)的含义以及关系(有助于深刻理解)
  8. IOT物联网观察之物联网是器,大数据是魂,人工智能是手段!
  9. Angular父子组件通过服务传参
  10. linux+tomcat+apache