POJ 3616
2016-04-18 20:01
176 查看
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,r; typedef struct name { int sta,en,eff; }milk; milk a[1005]; int dp[1005]; bool cmp(milk a,milk b) { if(a.sta<b.sta) return 1; else if(a.sta==b.sta&&a.en<b.en) return 1; else if(a.sta=b.sta&&a.en==b.en&&a.eff<=b.eff) return 1; return 0; } int main() { while(scanf("%d%d%d",&n,&m,&r)!=EOF) { for(int i=0;i<m;i++) { scanf("%d%d%d",&a[i].sta,&a[i].en,&a[i].eff); } sort(a,a+m,cmp); for(int i=0;i<m;i++) dp[i]=a[i].eff; int num; for(int i=0;i<m;i++) { for(int j=0;j<=i;j++) { if(a[i].sta>=a[j].en+r) { dp[i]=max(dp[i],dp[j]+a[i].eff); } } num=max(num,dp[i]); } printf("%d\n",num); } return 0; }
这种问题的话,其实还是很看重感觉的,做多了的话,可以马上想到这是一个队时间的分段的处理,然后就是两个for循环了,然后把状态转移方程给写正确就可以AC,
这种有选择性的取某几段的和,就是利用for来和max来实现求最大。
相关文章推荐
- 商品搜索引擎---分词(插件介绍与入门实例)
- 商品搜索引擎---分词(插件介绍与入门实例)
- 商品搜索引擎---分词(插件介绍与入门实例)
- Android 动画学习(一)
- 链表接口的封装
- elk之kibana安装与配置
- CodeChef PALPROB Palindromeness
- 线程的同步与互斥
- 九大隐私对象
- dmalloc arm-linux平台使用
- 测试
- [电机控制话题] 精辟!伺服电机、舵机、步进电机的区别
- js用数组实现级联列表
- (.DS_Store)避免多人提交代码到GitHub上起冲突
- 学习总结
- web.xml 有什么用?
- 安装《炉石传说》过程中遇到的问题及解决方法
- Mybatis最入门---映射文件(1)
- [安卓开发] 使用回车键或输入法的回车键 进行确认搜索
- android开发之Fragment 的生命周期及使用方法详解