poj 1836 Alignment (DP)
2016-04-22 16:38
295 查看
题意:给一个队伍,要去掉最少的人,使得中间高,两边矮,
并且除了中间的那两个人有可能等高外,两两不能等高(右边的可以和左边的等高)。
动态规划,从左边正序找最长上升子序列,右边逆序找最长上升子序列;
并且除了中间的那两个人有可能等高外,两两不能等高(右边的可以和左边的等高)。
动态规划,从左边正序找最长上升子序列,右边逆序找最长上升子序列;
#include <iostream> #include <algorithm> #include <cstring> #define N 1500 using namespace std; int main() { int n,i,j,dpl ,dpr ; double a ; memset(dpl,0,sizeof(dpl)); memset(dpr,0,sizeof(dpr)); cin>>n; for(i=0; i<n; i++) cin>>a[i]; for(i=0; i<n; i++) { dpl[i]=1; for(j=0; j<i; j++) if(a[j]<a[i]) dpl[i]=max(dpl[i],dpl[j]+1); } for(i=n-1; i>=0; i--) { dpr[i]=1; for(j=n-1; j>i; j--) if(a[j]<a[i]) dpr[i]=max(dpr[i],dpr[j]+1); } int m=0; for(i=0; i<n; i++) { int v1=0,v2=0; for(j=0; j<i; j++) if(dpl[j]>v1) v1=dpl[j]; for(; j<n; j++) if(dpr[j]>v2) v2=dpr[j]; if(v1+v2>m) m=v1+v2; } cout<<n-m<<endl; return 0; }
相关文章推荐
- StringUtils中 isNotEmpty 和isNotBlank的区别
- work queues
- C++中冒号(:)和双冒号(::)的用法
- Android中在xml中使用shape美化UI
- Java_Day03
- vi、ls、cd、pwd、mkdir、rm、mv、cp、cat、tail
- scikit-learn学习笔记:Simple 1D Kernel Density Estimation
- kNN最近邻分类器
- 错误记录 --关于错误perhaps the designated entry point is not set的解决方法
- WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例
- 操作系统是怎么工作的——mykernel环境的搭建
- 团队第一阶段站立会议04
- Recursive implementation of the Gaussian filter[翻译]
- listview分割线设置
- 【半平面交】[POJ2451]Uyuw's Concert
- Android安全机制分析
- 定制centos
- JS正则表达式语法详解
- JS正则表达式语法详解
- 粗谈awk