HDU 1257 最少拦截系统 LIS最长不减子序列
2010-08-24 15:10
441 查看
解题思路: 一开始没有想到是最大不减子序列,但是后来看了别人的解题报告并且自己分析了一下,真的就是最长不减子序列!用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 最少拦截系统(最长递减子序列的条数)
- 【最长上升子序列】杭电 hdu 1257 最少拦截系统
- HDU 1257 最少拦截系统 (贪心---求最长递减序列(不连续的))
- HDU-1257 最少拦截系统 贪心/DP 最长上升子序列的长度==最长不上升子序列的个数?
- HDU 1257 最少拦截系统(最长上升子序列 动态规划(DP))
- 【HDU 1257】最少拦截系统(dp求最长 不降 子序列)
- hdu 1257 最少拦截系统(最长单调递增序列)
- HDU 1257(最少拦截系统)最长不降子序列
- hdu-1257 最少拦截系统【单调递增子最长序列】
- 【hdu 1257】最少拦截系统(LIS最长上升子序列)
- HDU - 1257 最少拦截系统(LIS最长递增子序列)
- HDU 1257 最少拦截系统【最长上升子序列】
- HDU 1257 ( 最少拦截系统 ) 最长单调子序列 二分+dp
- HDU 1257 最少拦截系统(最长上升子序列+贪心)
- HDU 1257 最少拦截系统(最长上升子序列+贪心)
- HDU-1257 最少拦截系统(LIS)
- HDU 1257 最少拦截系统(最长上升子序列+贪心)
- HDU 1257 - 最少拦截系统(LIS)
- HDU:1257 最少拦截系统(贪心+动态规划DP||LIS?)
- HDU - 1257 最少拦截系统(最少下降序列 + 贪心)