题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=309
题意:很好理解就是选手可以选择加速,或者保持速度不变,但在要求的点处速度不能超过给定的值。
思路就是从起点开始不断加速,到有限制点时比较当前的速度和限制速度,如果当前速度小于限制速度则继续进行,否则,把当前的速度改为限制速度继续进行,直到最后,将结果保存到一个数组中,然后从后向前做同样的操作,直到0,不同之处在于在终点时的初始速度不能为1,而应该为不能达到的速度,将结果保存在另一个数组中,比较上面的两个数组,取相同位置的最小值,这样在这些值里边找最大的就是最求的最大速度。
View Code
1 #include2 #include 3 #include 4 #include 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] k)k=b[i]; 56 cout< <