BZOJ 1642: [Usaco2007 Nov]Milking Time 挤奶时间
2016-07-24 19:27
316 查看
根据开始时间排序后dp
f[i]表示第i头奶牛挤奶结束之后的最大挤奶量
f[i]=max{f[j]+out[i]}
其中time[j].end+r≤time[i].start
r就是挤奶的间隔
最后ans=max{f[i]}
嗯挺简单的吧
f[i]表示第i头奶牛挤奶结束之后的最大挤奶量
f[i]=max{f[j]+out[i]}
其中time[j].end+r≤time[i].start
r就是挤奶的间隔
最后ans=max{f[i]}
嗯挺简单的吧
#include<bits/stdc++.h> #define g getchar() #define ll long long #define inf 0x3f3f3f3f using namespace std; inline ll read(){ ll x=0,f=1;char ch=g; for(;ch<'0'||ch>'9';ch=g)if(ch=='-')f=-1; for(;ch>='0'&&ch<='9';ch=g)x=x*10+ch-'0'; return x*f; } inline void out(ll x){ int a[25],t=0; if(x<0)putchar('-'),x=-x; for(;x;x/=10)a[++t]=x%10; for(int i=t;i;--i)putchar('0'+a[i]); if(t==0)putchar('0'); putchar('\n'); } struct re{int start,end,out;}st[1005]; int n,m,r,f[1005],ans; inline bool cmp(re x,re y){return x.start==y.start?x.end<y.end:x.start<y.start;} int main(){ n=read();m=read();r=read(); for(int i=1;i<=m;++i) st[i].start=read(),st[i].end=read(),st[i].out=read(); sort(st+1,st+1+m,cmp); for(int i=1;i<=m;++i)f[i]=st[i].out; for(int i=2;i<=m;++i) for(int j=1;j<i;++j){ if(st[j].end+r<=st[i].start)f[i]=max(f[i],f[j]+st[i].out); } for(int i=1;i<=m;++i)ans=max(ans,f[i]); out(ans); return 0; }
相关文章推荐
- 第一章.对象导论之异常处理
- linux安装中文字体
- C++中substr函数的用法
- 15年编程生涯,资深架构师总结的7条经验
- redis hashes类型操作
- mysql主从复制
- 创建线程的两种方式
- 置换 置换群 应用
- 随笔2
- CODEVS 1073 家族 并查集模板
- 51nod 1130 阶乘长度 [Stirling公式]
- **JQUERY** jQuery遍历
- Jdbc查询数据库处理结果集优化查询代码
- HDU1892 See you~
- C语言的输入输出-几个函数的使用比较
- mysql 忘记root密码后重置方法
- TCP连接的三次握手
- linux安装mysql与安装后常见的问题总结
- 深度学习21天实战Caffe学习笔记--笔记3--caffe代码梳理
- Java---设计模式(工厂方法)