HDU 1257 最少拦截系统 LIS最长不减子序列

解题思路: 一开始没有想到是最大不减子序列,但是后来看了别人的解题报告并且自己分析了一下,真的就是最长不减子序列!用dp[i]表示第i个位置上的所需要的导弹系统数量!把它当做最简单的LIS做就ac了!后来我仔细考虑了一下,改了一下,结果却wa了!不知道怎么回事!还是以后再来再想想吧---- 下面是ac代码:完全是当做LIS做的:

#include<iostream> #include<cstdlib> #include<cstdio> using namespace std; int dp[10000]; int main() { int N,i,j,a[10000],maxtemp; while(scanf("%d",&N)!=EOF) { for(i=0;i<N;i++) scanf("%d",&a[i]); dp[0]=1; for(i=1;i<N;i++) { maxtemp=0; for(j=0;j<i;j++) { if(a[i]>=a[j]&&dp[j]>maxtemp) maxtemp=dp[j]; } dp[i]=maxtemp+1; printf("dp[%d]=%d/n",i,dp[i]); } maxtemp=0; for(i=0;i<N;i++) maxtemp=max(maxtemp,dp[i]); printf("%d/n",maxtemp); } return 0; }

 

后来自己重新考虑了一下写了个另外的代码,但是交上去挖了:

牛人如果愿意看看是什么原因,希望可以得到牛人的提示留言,谢谢:

#include<iostream> #include<cstdlib> #include<cstdio> using namespace std; int dp[100]; int main() { int N,i,j,k,a[100],maxtemp; while(scanf("%d",&N)!=EOF) { for(i=0;i<N;i++) scanf("%d",&a[i]); dp[0]=1; for(i=1;i<N;i++) { maxtemp=0; if(a[i]>=a[i-1]) { for(k=0;k<i;k++) maxtemp=max(maxtemp,dp[k]); } dp[i]=maxtemp+1; // printf("dp[%d]=%d/n",i,dp[i]); } maxtemp=0; for(i=0;i<N;i++) maxtemp=max(maxtemp,dp[i]); printf("%d/n",maxtemp); } return 0; }

谢谢---

你可能感兴趣的:(HDU 1257 最少拦截系统 LIS最长不减子序列)