POJ 1836 Alignment(LIS变形)
来源:互联网 发布:vb.net excel另存为 编辑:程序博客网 时间:2024/05/25 23:57
题目链接:http://poj.org/problem?id=1836
题意:
一个队列的士兵,要求选择x个士兵出列,使得剩下的士兵可以看到向左或向右无穷远出,求x最小值。
分别从左向右和从右向左扫一遍最长递增子序列,然后枚举中点,求最大值max,那么n-max则为x最小值。
#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;const int INF=0x3f3f3f3f;const int maxn=1005;int n;double a[maxn],b[maxn];int dp1[maxn],dp2[maxn];int main(){#ifndef ONLINE_JUDGE freopen("test.in","r",stdin); freopen("test.out","w",stdout);#endif while(~scanf("%d",&n)){ for(int i=1;i<=n;i++){ scanf("%lf",&a[i]); b[n-i+1]=a[i]; } memset(dp1,0,sizeof(dp1)); memset(dp2,0,sizeof(dp2)); for(int i=1;i<=n;i++){ for(int j=1;j<i;j++){ if(a[i]>a[j]&&dp1[i]<dp1[j]+1) dp1[i]=dp1[j]+1; } } for(int i=1;i<=n;i++){for(int j=1;j<i;j++){if(b[i]>b[j]&&dp2[i]<dp2[j]+1)dp2[i]=dp2[j]+1;}} int max=-INF; for(int i=1;i<=n;i++){ for(int j=1;j<=n-i;j++){ if(dp1[i]+dp2[j]+2>max) max=dp1[i]+dp2[j]+2; } } printf("%d\n",n-max); }return 0;}
0 0
- poj 1836 Alignment (LIS变形)
- POJ 1836-Alignment(DP/LIS变形)
- POJ 1836 Alignment(LIS变形)
- POJ 1836 Alignment LIS变形(最长上升子序列)
- POJ 1836 Alignment 变形的LIS
- POJ 1836 Alignment(LIS)
- POJ 1836 Alignment( LIS )
- POJ 1836 Alignment (LIS)
- poj 1836 Alignment(dp,LIS)
- POJ 1836 Alignment(DP | LIS)
- POJ 1836 Alignment (动态规划LIS)
- POJ 1836-Alignment(LIS-士兵列队)
- POJ 1836 Alignment DP(LIS)
- POJ 1836--Alignment(LIS,LCS)
- poj 1836 Alignment (DP LIS)
- POJ 1836 Alignment(DP LIS)
- [POJ 1836]Alignment[DP][LIS]
- Poj 1836 Alignment (双重LIS)
- 集合类使用set
- C++ 资源大全
- java工具(二)----poi操作excel和xml,定时任务
- java封装导出excel之——优化
- js实现div动态改变大小
- POJ 1836 Alignment(LIS变形)
- 【C#】装箱与拆箱
- Javascript模块化编程(一):模块的写法
- leetcode292题 题解 翻译 C语言版 Python版
- com.mysql.jdbc.NotUpdatable: Result Set not updatable (references no primary keys).(解决方法)
- 安卓开发——AndroidStudio生成getter,setter,tostring,constructor等函数的方式
- HIVE与mysql
- 【ITOO】---StringBuilder对象
- 智能机器人服务广州春运