动态规划--合唱队形
2017-04-12 20:41
176 查看
题目大概:
一行数字要求从两边到中间依次增大,问给出的一行数字要去掉多少才能形成这种数列。思路:
可以任选一个做中间数k,从1到n。然后求第一个数到k的最长上升子序列的长度la,再求最后一个数到k的最长上升子序列的长度lb。
最后n-(la+la-1)就是去掉的数字个数,减一是因为多算了一个k。
感想:
有些题需要几个简单的算法混合使用或者重复使用。代码:
#include <iostream> using namespace std; int main() {int n,thm=300; int a[1001]={0},b[1001]={0},dp[1001]={0},c[1001]={0}; b[1]=1; cin>>n; for(int i=1;i<=n;i++) {cin>>a[i];} for(int y=1;y<=n;y++) {int ma=0; for(int i=2;i<=y;i++) { ma=0; for(int t=1;t<i;t++) {if(a[i]>a[t]){ if(b[t]>ma){ma=b[t];} } } b[i]=ma+1; } c[n]=1; for(int i=n-1;i>=y;i--) { ma=0; for(int t=n;t>i;t--) {if(a[i]>a[t]){ if(c[t]>ma){ma=c[t];} } } c[i]=ma+1; } dp[y]=n-b[y]-c[y]+1; if(thm>dp[y])thm=dp[y]; } cout<<thm; return 0; }
相关文章推荐
- caioj1065:动态规划入门(一维一边推3:合唱队形)
- 动态规划之合唱队形问题
- 动态规划__合唱队形问题
- 动态规划—29合唱队形
- 动态规划之合唱队形问题
- JZOJsenior1168.【NOIP动态规划专题】合唱队形
- 动态规划之合唱队形问题(最长递增子序列变形)
- 普及练习场 线性动态规划 合唱队形
- 动态规划试题:合唱队形
- 动态规划之合唱队形问题(最长递增子序列变形)
- 动态规划3:合唱队形
- 【oj平台】合唱队&动态规划
- 华为在线编程系列-合唱队(动态规划的应用)
- 动态规划之线性动规(钢条切割、合唱队、最长递增子序列)
- 华为训练题目:初级——合唱队(递增子序列,DP动态规划问题)
- 动态规划练习题-5(吃糖果)
- 以一个题目来深刻理解回溯和动态规划。
- 动态规划之切割钢条
- 集训-变形合唱队形(DP)
- 杭电 2829 蛋疼的动态规划