CDOJ 1349 柱爷大战滑稽王(dp LCS转LIS)
来源:互联网 发布:php简易查询系统源码 编辑:程序博客网 时间:2024/06/07 08:22
H - 柱爷大战滑稽王
Time Limit: 4500/4500MS (Java/Others) Memory Limit: 120000/120000KB (Java/Others)
咸鱼历
瞄哈哈村则首当其冲!,形势不容乐观
据传,咸鱼王所在的世界有三大尊者,分别是
三个人的实力深不可测,其中以咸鱼王实力最强,因而三人隐隐以咸鱼王为首
阵前
“瞄哈哈村的鼠辈,可有人敢出来与我一战?!”
“滑稽王又来叫阵了!,欺我瞄哈哈村无人吗?”,卿学姐愤怒的说道,话虽如此,瞄哈哈村阵前的气氛却静的可怕,每个人看向滑稽王的眼神中都充满了忌惮之色,竟无一人敢应战.
“据传滑稽王的吃惊诀已经修炼到了大成,其幻化出的吃惊光剑攻击力惊人,与其正面对决,怕是....”,天行廖(狗头军师)在一旁分析到.
在一旁原本静坐的柱爷突然睁开双眼,眼中爆发出惊人光芒
“我可一战,定取滑稽王首级”
诸将易得耳。至如柱者,国士无双
为了简化滑稽王和柱爷的对决,我们将柱爷和滑稽王数据化得到
柱爷的咸鱼神功有
滑稽王的吃惊诀有
柱爷为了给滑稽王一个下马威,决定在一瞬间打出这
柱爷现在想知道能够造成多少点额外伤害?
Input
第一行两个整数
接下来一行,
接下来一行,
数据保证:
1≤N,M≤106 |Ai,Bi|≤109 Ai互不相同
Output
输出仅一行,表示柱爷能够造成的额外伤害
Sample input and output
4 41 2 3 41 2 3 4
5
3 31 2 33 2 1
2
3 31 2 34 5 6
1
Hint
最长公共子序列(LCS):不一定要连续!
测试数据没有样例
题解:这题看上去只是要求一个最大公共子序列,但是,显然使用传统的LCS是会MLE的,因此,这里使用LCS转LIS的方法,然后求解
代码如下:
#include <iostream>#include <stdio.h>#include <vector>#include <algorithm>#include <map>using namespace std;#define LEN 10000005int f[LEN], b[LEN],d[LEN],lin[LEN];int M,N;map <int,int> maplis;vector <int> aa;map<int,int>::iterator it;int bsearch(const int *f, int size, const int &a){ int l=0, r=size-1; while( l <= r ) { int mid = (l+r)/2; if( a > f[mid-1] && a <= f[mid] ) return mid; // >&&<= 换为: >= && < else if( a < f[mid] ) r = mid-1; else l = mid+1; }}int LIS(const int *a, const int &n){ if(aa.empty()) return 0; int i, j, size = 1; f[0] = a[0]; d[0] = 1; for( i=1; i < n; ++i ){ if( a[i] <= f[0] ) j = 0; // <= 换为: < else if( a[i] > f[size-1] ) j = size++; // > 换为: >= else j = bsearch(f, size, a[i]); f[j] = a[i]; d[i] = j+1; } return size;}int main(){ int i,m; scanf("%d %d", &M,&N); for(i = 1; i <= M; i++) { scanf("%d",&m); maplis.insert(map<int,int>::value_type(m,i)); } for(i = 1; i <= N; i++) scanf("%d", &b[i]); for(i = 1; i <= N; i++) { it= maplis.find(b[i]); if(it!=maplis.end()) aa.push_back(maplis[b[i]]); } for(i=0;i<aa.size();i++) lin[i]=aa[i]; printf("%d",LIS(lin,i)+1);return 0;}
- CDOJ 1349 柱爷大战滑稽王(dp LCS转LIS)
- 【cdoj 1349】柱爷大战滑稽王 lcs转lis+二分查找(二分啊)
- 【CDOJ】柱爷大战滑稽王 【LCS转LIS问题 解决Lcs问题的O(NlogN)算法】
- 2016 UESTC Training for Dynamic Programming H - 柱爷大战滑稽王 LCS转LIS
- cdoj柱爷大战滑稽王
- CSU1120-病毒-DP/LCS/LIS
- 算法(一) --DP动态规划(LIS和LCS)
- LCS时间复杂度O(NlogN) (LCS 转 LIS)
- CDOJ 1347柱爷的矩阵(二维dp)
- CDOJ 1321柱爷的恋爱 (区间dp)
- 初识dp(LCS,LIS)JAVA版
- AHOI 基因匹配 dp LCS LIS
- 子序列(LIS、LCS)
- bzoj 4990(LCS->LIS)
- LCS转LIS(大地的秘密题解)
- Uva 10635 王子和公主(LCS转LIS+二分)
- Uva - 10635 - Prince and Princess(LCS转LIS)
- UVa 10635 - Prince and Princess(LCS转LIS)
- java的深拷贝与浅拷贝
- 车牌检测和识别
- shell中的特殊符号
- 蓝桥杯-方格填数
- 如何在C#.net中自定义和使用特性
- CDOJ 1349 柱爷大战滑稽王(dp LCS转LIS)
- ActiveMQ完整的java客户端例子(源码)
- 笔试算法题
- 设计模式之装饰者模式简单理解
- Android BroadcastReceiver中播放提示语音有时失效问题
- 7.2 MySQL权限系统原理
- 判断一个double型数据是否为0
- poj 2456 Aggressive cows (二分)
- android studio运行程序时正常,调试时出现NoSuchMethodException的解决办法