合唱队形---最长上升子序列变形
来源:互联网 发布:黑客要学什么编程语言 编辑:程序博客网 时间:2024/05/20 18:43
http://www.rqnoj.cn/Problem_26.html
一、思路
感觉自己好笨
虽然知道是求两次最长上升子序列,一边上升,一边下降
我愣是理解成了,写两个,都是顺序来,一个是求顺序的最长上升
一个是顺序的最长下降
怎么调试都是20-40个得分点
郁闷了
-----------------
求两次 成开口向下的抛物线
顺序求上升
逆序求上升
然后求max(aUp[i] + aReverseUp[i] - 1) 其中1<=i<=n
时间复杂度NlogN
总结:想清楚了再写,不要想到某个点 就去弄,陷于局部
终于AC了
#include <iostream.h>#define MAX 101//二分查找,小于key 的最大f[]的位置jint BinarySearch(int * f, int l, int r, int key){if (l <= r){int mid = (l + r) / 2;if (f[mid] > key){return BinarySearch(f, mid+1, r, key);}else{return BinarySearch(f, l, mid-1, key);}}else{return l;}}//二分查找,大于key的最小f[]的位置jint UpBinarySearch(int *upF,int l, int r, int key){if (l<=r){int mid = (l + r) / 2;if (upF[mid] >= key){return UpBinarySearch(upF,l, mid-1, key);}else{return UpBinarySearch(upF, mid+1, r, key);}}else{return l;}}int main(){int a[MAX];int f[MAX];int aUp[MAX];int aReverseUp[MAX]; int k = 0;//lengthint i = 0, n=0;//loop//读入cin>>n;for (i=1; i<=n; i++){cin>>a[i];}//正着上升求序f[0] = -9999;k = 0;for (i=1; i<=n; i++){if (f[k]<a[i]){f[++k] = a[i];aUp[i] = k;}else{int j = UpBinarySearch(f, 0, k, a[i]);f[j] = a[i];aUp[i] = j;}}//逆着上升排序f[0] = -9999;k = 0;for (i=n; i>=1; i--){if (f[k]<a[i]){f[++k] = a[i];aReverseUp[i] = k;}else{int j = UpBinarySearch(f, 0, k, a[i]);f[j] = a[i];aReverseUp[i] = j;}}//求最长的kk = -1;for (i=1; i<=n; i++){int sum = aUp[i] + aReverseUp[i] - 1;//测试用//cout<<" up:"<<aUp[i]<<" aReverseUp: "<<aReverseUp[i]<<endl;if (k<sum){k = sum;}}//输出要剔除的n-kcout<<n-k;return 0;}
- 合唱队形---最长上升子序列变形
- 【最长上升子序列】[NOIP2004提高组]合唱队形
- rnqoj-28-合唱队形-最长上升子序列
- 1091 合唱队形(最长上升子序列模板)
- 1065: 合唱队形(最长上升,下降子序列)
- noip2004 合唱队形 (最长严格上升子序列+最长严格下降子序列)
- 洛谷Oj-合唱队形-最长上升子序列+最长下降子序列
- 合唱队形-最长递增子序列变种
- 合唱队形----RQNOJ_26----最长单调子序列
- 动态规划之合唱队形问题(最长递增子序列变形)
- 动态规划之合唱队形问题(最长递增子序列变形)
- 动态规划之合唱队形问题(最长递增子序列变形)
- 双向最长上升序列:TYVJ 1067 合唱队形
- cugb 1009 合唱队形 (最大上升子序列)
- 合唱队形(LIS最长递增子序列) 解题过程
- 最长递增子序列 & 合唱队形 & 山峰数列
- codevs合唱队形 动态规划求最长递增子序列
- 最长上升子序列的变形
- What Are the Tree Table Names
- 支持ubuntu12.04中文输入的sublime text
- 内存的基本知识
- 快速排序
- C 二维数组与指针的关系
- 合唱队形---最长上升子序列变形
- 应用百度地图逆地址解析:经纬度-->地址
- HDU2719:The Seven Percent Solution
- Jlink V8固件修复(支持MDK4.70a)
- 简单选择排序
- 系统提示是我们不能忽视的,哪怕只是警告
- TIME_WAITlinux内核优化
- strdup
- C#判断文件路径是否存在或者判断文件是否存在