您的位置:首页 > 其它

nyoj 309 bobsledding 即河南省第四届大学生程序设计大赛第七题

2012-03-09 07:56 381 查看
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=309

题意:很好理解就是选手可以选择加速,或者保持速度不变,但在要求的点处速度不能超过给定的值。

思路就是从起点开始不断加速,到有限制点时比较当前的速度和限制速度,如果当前速度小于限制速度则继续进行,否则,把当前的速度改为限制速度继续进行,直到最后,将结果保存到一个数组中,然后从后向前做同样的操作,直到0,不同之处在于在终点时的初始速度不能为1,而应该为不能达到的速度,将结果保存在另一个数组中,比较上面的两个数组,取相同位置的最小值,这样在这些值里边找最大的就是最求的最大速度。

View Code

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
int a[1005];
int b[1005];
int c[1005];
int main()
{
int i,n,m,k,x,y;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for (i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
a[x]=y;
}
k=1;
for (i=0;i<=n;i++)
{
if(!a[i])
b[i]=k++;
else
{
if(a[i]>k);
else k=a[i];
b[i]=k++;
}
}

k=2000;
for (i=n;i>=0;i--)
{
if(!a[i])
c[i]=k++;
else
{
if(a[i]>k);
else k=a[i];
c[i]=k++;
}
}

for (i=0;i<=n;i++)
{
if(b[i]<c[i]);
else b[i]=c[i];
}
k=0;
for(i=0;i<=n;i++)
if(b[i]>k)k=b[i];
cout<<k<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: