<s>求大佬设计一下程序，我的时间复杂度太大了</s>
<s>这种题目真讨厌啊~~语文不好，要看半天才能看懂他在说什么。</s><s>分析题目，结果如下： 有一个长度为n的数组，起始位置是数组头部pos=0；每轮可以跳x步(1<=x<=Vi)同时需满足（Di>=n[pos+x]）；经过若干轮后，判断最后是否能到达数组尾部pos=n-1。</s><s>给定m个（Vi，Di），判断每个是否能到达。</s><s>这个用贪婪算法，每次能跳多远就跳多远，如果一步都不能跳那么就一定跳不出了。</s><s>这个问题时间复杂度O(n)~ #include<stdio.h> #include<stdlib.h> int main() { int n,m,pos,step; int * pool,*Vi,*Di; scanf("%d%d",&n,&m); //读入长度为n的鳄鱼数据 pool=(int *)malloc(sizeof(int)*n); for(int i=0; i<n; i++) scanf("%d",pool+i); //读入m个 装备的属性 Vi=(int*)malloc(sizeof(int)*m); Di=(int*)malloc(sizeof(int)*m); for(int i=0; i<m; i++) scanf("%d%d",Di+i,Vi+i); //求每个装备是能渡过 for(int i=0; i<m; i++) { pos=0;//起始位置 while(pos<n-1) { step=0; //求一次最多能跳几步 for(int j=1; j<=Vi[i]&&pos+j<n; j++) if(Di[i]>=pool[pos+j]) step=j; //如果一步都跳不了，那就不再跳了 if(step==0) break; else pos+=step; } //输出结果 if(pos==n-1) printf("Yes\n"); else printf("No\n"); } free(pool); free(Vi); free(Di); }</s>
