【tyvj】【dp】合唱队型
来源:互联网 发布:江苏软件行业协会 编辑:程序博客网 时间:2024/05/16 16:07
描述
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
输入格式
输入文件chorus.in的第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。
输出格式
输出文件chorus.out包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
思路
正着一遍最长上升子序列,倒着一遍最长上升子序列,每一个位置的价值为在该位置的两个dp值之和减一,求这个价值的最大值,N-max{sumdp}即为答案
#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#define INF 0xfffffff#define REP(a,b) for(int i=a;i<=b;i++)#define RES(a,b) memset(a,b,sizeof(a))using namespace std;int n,t[120],dp1[120],dp2[120],val[120],ans=0;int main(){RES(dp1,0); RES(dp2,0);scanf("%d",&n);REP(1,n) scanf("%d",&t[i]);REP(1,n){dp1[i]=1;for(int j=1;j<i;j++){if(t[j]<t[i]) dp1[i]=max(dp1[i],dp1[j]+1);}}for(int i=n;i>=1;i--){dp2[i]=1;for(int j=n;j>i;j--){if(t[j]<t[i]) dp2[i]=max(dp2[i],dp2[j]+1);}}REP(1,n) {val[i]=dp1[i]+dp2[i]-1;//printf("dp1[%d]=%d dp2[%d]=%d\n",i,dp1[i],i,dp2[i]);ans=max(ans,val[i]);}printf("%d",n-ans);return 0;}
0 0
- 【tyvj】【dp】合唱队型
- [BZOJ1996]HNOI2010合唱队|DP
- 1996: [Hnoi2010]chorus 合唱队 DP
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- 合唱队
- annotation 注解
- mysqldump使用方法
- 浮动和定位引起高度塌陷怎么办?
- 开始重新来学C语言了
- 关于高德地图点击不出现showinfowindow
- 【tyvj】【dp】合唱队型
- 关于css的一些学习笔记
- iOS App之间跳转
- Android项目重构之路:界面篇
- PL/SQL Developer技巧
- CUDA-CODE3-查询GPU设备属性
- Machine Learning In Action 系列----手写数字识别(一)
- 取得手机屏幕大小 DisplayMetrics
- OpenCV中gpu下使用cascade classifier遇到问题的解决方案