cugb 1009 合唱队形 (子序列)
来源:互联网 发布:工程模拟仿真软件 编辑:程序博客网 时间:2024/05/22 12:37
昨天看了好长时间还是没思路,看了别人的思路却没看懂,早上忍不住就问了老大一下(xy),嘿嘿,“因为求之后 枚举的是以某个数为顶点 左右两边最长的序列”,一语惊醒梦中人啊!还是我太笨呢?反正现在会了。。。。
第一次,求以a[i]为结束点的最长上升子序列,
第二次,求以a[i]为起始点的最长下降子序列,
这两个都求出来后,相加,那么d[i]里保存的就是每一个a[i]向两边都降的最长序列,就是某个数前边最长的升,后边最长的降,但要注意,a[i]在升序时算了一次,降序里又算了一次,故实际长度应减一,恩,就是这了。。。
#include<stdio.h> int main(){ int n,a[1005],i,j,d[1005],dp[1005],max; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); d[0]=1; for(i=1;i<n;i++) { d[i]=1; for(j=0;j<i;j++) if(a[j]<a[i]&&d[j]+1>d[i]) d[i]=d[j]+1; } dp[n-1]=1; for(i=n-2;i>=0;i--) { dp[i]=1; for(j=n;j>i;j--) if(a[j]<a[i]&&dp[j]+1>dp[i]) dp[i]=dp[j]+1; } for(i=0;i<n;i++) d[i]+=dp[i]; for(i=max=0;i<n;i++) if(max<d[i]) max=d[i]; printf("%d",n-max+1); return 0;}
- cugb 1009 合唱队形 (子序列)
- cugb 1009 合唱队形 (最大上升子序列)
- CUGB 1009 合唱队形 【DP】
- cugb 1032 (和1009的合唱队形完全一样)
- 合唱队形(LIS最长递增子序列) 解题过程
- 1091 合唱队形(最长上升子序列模板)
- 1065: 合唱队形(最长上升,下降子序列)
- 合唱队形-最长递增子序列变种
- 合唱队形----RQNOJ_26----最长单调子序列
- 合唱队形---最长上升子序列变形
- noip2004 合唱队形 (最长严格上升子序列+最长严格下降子序列)
- 07年 ZZUPC校赛第五题 合唱队形(最长XX子序列。。)
- 九度OJ 1131 合唱队形 -- 动态规划(最长递增子序列)
- [ACM] 九度OJ 合唱队形 (最长递增子序列改版)
- 动态规划之合唱队形问题(最长递增子序列变形)
- 【例题】【动规(最长XX子序列)】NKOJ 1042 合唱队形(NOIP)
- 动态规划之合唱队形问题(最长递增子序列变形)
- 动态规划之合唱队形问题(最长递增子序列变形)
- jQuery获取客户端控件select
- MTD的坏块管理(一)-快速了解MTD的坏块管理
- 学习的本质
- log4J 根据日志级别生成对应文件
- 纯图片资源DLL项目建立和配置
- cugb 1009 合唱队形 (子序列)
- MTD坏块管理(二)-内核获取Nandflash的参数过程
- WinCE下使用Lazarus获取设备名
- linux下C语言实现按任意键继续~~
- java环境变量(win7)
- ANT简明教程[转载]
- android:shape的使用
- 毛巾多久换一次?
- Android:资源 id 及资源 id 的动态获取