您的位置:首页 > 其它

【动态规划】【RQNOJ】可怜的Oliver

2010-07-18 19:47 302 查看

题目描述

1.背景描述Background
Oliver作为本班的班主任,看到大家摘巧克力,很是生气。他把大家叫到一起,拷问大家是谁摘的,为什么摘。同学们是很团结的,无论班主任软硬兼施,威逼利诱。大家都不松口。所以班主任打发雷霆,罚大家抄写单词。其中有一个人(为了他的生命安全,在此不透露姓名),为了为大家解恨,在Oliver的价值0.01秘鲁币的盒饭里放入了秘密武器——苍蝇。
2.问题描述Description
放苍蝇事件最终还是被Oliver知道了,精明的Oliver还调查出了放苍蝇的人是XX,他要严厉的惩罚XX,惩罚XX写作业,布置给XX比平常多几十倍几百倍的作业,在假期的任意时刻他都有可能布置作业,天哪,XX的黄金周又泡汤啦。
XX的原计划有N分钟够他游玩,可是他必须服从Oliver,先做作业然后玩,从第一分钟开始到第N分钟结束。当XX从放假的第一分钟起就要开始赶作业。如果在同一时刻有多个作业需要完成,XX可以选其中的一个来做,而其余的则可以由其他的同学帮他来完成,反之如果只有一个作业,则该作业必须由XX去完成,假如某些作业开始时刻XX正在工作,则这些作业也由XX的同学来帮他完成。如果某作业于第P分钟开始,持续时间为T,则该作业将在第P+T-1分钟结束。

7.时间限制Time Limitation
每个测试点1s
注释Hint:
对于所有的N和K(1<=n<=10000,1<=k<=10000),出题者汉语不太好,不过题目意思还是比较清楚的,请大家海涵。

输入格式

输入数据第一行含两个用空格隔开的整数N和K,N表示XX的原计划玩的时间长(以分钟为单位),K表示Oliver布置的作业总数。
接下来共有K行,每一行有两个用空格隔开的整数P和T,表示Oliver老师布置的作业从第P分钟开始,持续时间为T分钟,其中1<=p<=n,1<=p+t-1<=n。

输出格式

输出仅一行,包含一个整数,表示XX可能获得的最大空暇的时间。

样例输入

#include<stdio.h>
int a[20001],b[20001],f[20001];
int n,k,i,j;
int main()
{
scanf("%d%d",&n,&k);
for (int i=1;i<=k;++i) scanf("%d%d",&a[i],&b[i]);
j=k;
for (int i=n;i>=1;--i)
{
while (a[j]>i) --j;
if (a[j]!=i) f[i]=f[i+1]+1;
else
while (a[j]==i)
{
if (f[i+b[j]]>f[i])
f[i]=f[i+b[j]];
--j;
}
}
printf("%d/n",f[1]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: