poj 1836 Alignment(dp)

题目:http://poj.org/problem?id=1836

题意:最长上升子序列问题, 站队,求踢出最少的人数后,使得队列里的人都能看到 左边的无穷远处 或者 右边的无穷远处。

代码O(n^2):

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n,i,j,d1[1100],d2[1100],mx;
 8     double a[1100];
 9     cin>>n;
10     for(i=1; i<=n; i++)
11         cin>>a[i];
12     d1[1]=1;
13     for(i=2; i<=n; i++)
14     {
15         mx=1;
16         for(j=1; j<i; j++)
17             if(a[i]-a[j]>0&&d1[j]>=mx)
18             {
19                 mx=d1[j]+1;
20             }
21         d1[i]=mx;
22     }
23     d2[n]=1;
24     for(i=n-1; i>=1; i--)
25     {
26         mx=1;
27         for(j=n; j>i; j--)
28             if(a[i]-a[j]>0&&d2[j]>=mx)
29             {
30                 mx=d2[j]+1;
31             }
32         d2[i]=mx;
33     }
34     mx=-1;
35     for(i=1; i<=n; i++)
36         for(j=i+1; j<=n; j++)
37             if(d1[i]+d2[j]>mx)
38                 mx=d1[i]+d2[j];
39     cout<<n-mx<<endl;
40     return 0;
41 }

 

 

转载于:https://www.cnblogs.com/bfshm/p/3389912.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值