九度OJ-1131-合唱队形
2014-10-06 21:43
246 查看
http://ac.jobdu.com/problem.php?pid=1131
这是一道最长递增子序列加强版。
只需计算以a[i]为结尾的最长递增子序列,以a[i]为开头的最长递减子序列(这个实际就是逆序后的以a[i]为结尾最长递增子序列嘛!)
两个部分代码:
最后这样处理就OK了。
这是一道最长递增子序列加强版。
只需计算以a[i]为结尾的最长递增子序列,以a[i]为开头的最长递减子序列(这个实际就是逆序后的以a[i]为结尾最长递增子序列嘛!)
两个部分代码:
for(i=1;i<n;i++){ max=1; for(j=0;j<i;j++){ if(a[i]>a[j] && f1[j]+1>max){ max=f1[j]+1; } } f1[i]=max; } for(i=n-2;i>=0;i--){ max=1; for(j=n-1;j>i;j--){ if(a[i]>a[j] && f2[j]+1>max){ max=f2[j]+1; } } f2[i]=max;///// }我一开始犯了一个错误:注意标记部分,我一开始写的是f2[i]=f2[i]+max-1;本意是直接计算出符合题意的序列总长度,然而这是不对的,因为f2[i]会影响到后面的计算。而且即使可以,f2[n-1]也是没有计算的.
最后这样处理就OK了。
for(i=0;i<n;i++){ f2[i]=f1[i]+f2[i]; } max=f2[0]; for(i=1;i<n;i++){//找最大值 if(f2[i]>max) max=f2[i]; } printf("%d\n",n-max+1);
相关文章推荐
- 九度OJ 1131 合唱队形 -- 动态规划(最长递增子序列)
- 九度OJ 1131 合唱队形 -- 动态规划(最长递增子序列)
- 九度OJ 1131 合唱队形
- 九度OJ-1131:合唱队形(最长递增子序列)
- 九度 oj 题目1131:合唱队形
- 【最长降序子序列+双向】九度OJ 题目1131:合唱队形
- 九度题目1131:合唱队形
- 九度OJ,openjudge 2711 合唱队形
- ♥九度Online Judge 1131-合唱队形【LIS】
- OJ_1131 合唱队形
- 九度 1131 合唱队形
- 九度1131_合唱队形【LIS】【LCS】
- 九度OJ 1131 合唱队形 (动态规划DP)
- 题目1131:合唱队形
- 九度OJ 1131:合唱队形 (DP、最长上升下降序列)
- 合唱队形 九度1131 RONOJ26
- 题目1131:合唱队形
- 1131_合唱队形
- 九度OJ 题目1131:合唱队形
- 题目1131:合唱队形