博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1664[Usaco2006 Open]County Fair Events 参加节日庆祝*
阅读量:6852 次
发布时间:2019-06-26

本文共 982 字,大约阅读时间需要 3 分钟。

题意:

有N个节日,每个节日有个开始时间,及持续时间。牛想尽可能多的参加节日,问最多可以参加多少。注意牛的转移速度是极快的,不花时间,且节日必须完整参加。N≤10000,开始时刻和持续时间≤100000。

题解:

dp。设f[i]表示i时刻到最后时刻最多可以参加多少节日。则f[i]=max(f[i+1],f[range[j].r+1],j为时刻i开始的节日)。

代码:

1 #include 
2 #include
3 #include
4 #define maxn 10100 5 #define inc(i,j,k) for(int i=j;i<=k;i++) 6 using namespace std; 7 8 inline int read(){ 9 char ch=getchar(); int f=1,x=0;10 while(ch<'0'||ch>'9'){
if(ch=='-')f=-1; ch=getchar();}11 while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();12 return f*x;13 }14 struct rg{
int len,n;}; rg rgs[maxn]; int f[maxn*20],n,mx,g[maxn*20];15 int main(){16 n=read(); inc(i,1,n){
int a=read(),b=read(); rgs[i]=(rg){b,g[a]}; g[a]=i; mx=max(mx,a);}17 for(int i=mx;i>=1;i--){18 f[i]=f[i+1]; for(int j=g[i];j;j=rgs[j].n)f[i]=max(f[i],f[i+rgs[j].len]+1);19 }20 printf("%d",f[1]); return 0;21 }

 

20160730

转载于:https://www.cnblogs.com/YuanZiming/p/5721971.html

你可能感兴趣的文章
我的友情链接
查看>>
我的友情链接
查看>>
子数组的和的最大值(包括升级版的首尾相连数组)
查看>>
LeetCode - Nth Highest Salary
查看>>
9.ORM数据访问
查看>>
在RHEL5下搭建SSH远程登录服务器
查看>>
使用Moblin SDK开发应用程序 -- Image Creator
查看>>
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记14 视图绘制Demo
查看>>
/dev/null &
查看>>
在Ubuntu上安装Node.js的Upstream版本
查看>>
扩展GridView控件(8) - 导出数据源的数据为Excel、Word或Text
查看>>
CISCO路由器配置基础(3)
查看>>
linux下通过串口登陆交换机
查看>>
微信公众平台群发规则说明
查看>>
LINUX下直接使用ISO文件
查看>>
第四章 apache的工作模式
查看>>
mysql备份和恢复总结
查看>>
软件明明已经删除 控制面板里还有名称
查看>>
深入浅出的SQL server 查询优化
查看>>
Hyper-V vNext新的虚拟机配置文件、配置版本
查看>>