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

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=309

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

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

View Code
 1 #include<iostream>
2 #include<cmath>
3 #include<cstring>
4 #include<cstdio>
5 using namespace std;
6 int a[1005];
7 int b[1005];
8 int c[1005];
9 int main()
10 {
11 int i,n,m,k,x,y;
12 while(scanf("%d%d",&n,&m)!=EOF)
13 {
14 memset(a,0,sizeof(a));
15 memset(b,0,sizeof(b));
16 memset(c,0,sizeof(c));
17 for (i=1;i<=m;i++)
18 {
19 scanf("%d%d",&x,&y);
20 a[x]=y;
21 }
22 k=1;
23 for (i=0;i<=n;i++)
24 {
25 if(!a[i])
26 b[i]=k++;
27 else
28 {
29 if(a[i]>k);
30 else k=a[i];
31 b[i]=k++;
32 }
33 }
34
35 k=2000;
36 for (i=n;i>=0;i--)
37 {
38 if(!a[i])
39 c[i]=k++;
40 else
41 {
42 if(a[i]>k);
43 else k=a[i];
44 c[i]=k++;
45 }
46 }
47
48 for (i=0;i<=n;i++)
49 {
50 if(b[i]<c[i]);
51 else b[i]=c[i];
52 }
53 k=0;
54 for(i=0;i<=n;i++)
55 if(b[i]>k)k=b[i];
56 cout<<k<<endl;
57 }
58 return 0;
59 }



posted @ 2012-03-09 07:56  我们一直在努力  阅读(241)  评论(0编辑  收藏  举报