Codeforces 10D LCIS 找出最长公共子和产量增加这个序列 dp
主题链接:点击打开链接
意甲冠军:
特定n长序列
给定k长序列
求LCIS并输出这个子序列
如有多解输出随意解。。
= - = 敲的时候听着小曲儿pre的含义还没有想清楚,万万没想到就过了。。。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<set>
#include<vector>
#include<map>
#include<math.h>
#include<string>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 505
int a[N],s[N];
int n, k;
int dp[N][N];
int pre[N][N][2];
int is[N][N];
vector<int>G;
int main(){
int i,j,co;
while(~scanf("%d",&n)){
G.clear();
for(i=1;i<=n;i++)scanf("%d",&a[i]);
scanf("%d",&k);
for(i=1;i<=k;i++)scanf("%d",&s[i]);
memset(dp, 0, sizeof dp);
memset(pre, 0, sizeof pre);
memset(is, 0, sizeof is);
for(i=1;i<=n;i++) {
int maxx = 0;
int x = 0, y = 0;
for(j=1;j<=k;j++)
{
dp[i][j] = dp[i-1][j];
if(a[i]>s[j] && maxx < dp[i-1][j]) {
maxx = dp[i-1][j];
if(is[i-1][j])
x = i-1, y = j;
else {
x = pre[i-1][j][0];
y = pre[i-1][j][1];
}
}
if(a[i]==s[j]) {
is[i][j] = 1;
dp[i][j] = maxx + 1;
if(is[x][y])
pre[i][j][0] = x, pre[i][j][1] = y;
else {
pre[i][j][0] = pre[x][y][0];
pre[i][j][1] = pre[x][y][1];
}
continue;
}
if(is[i-1][j])
pre[i][j][0] = i-1, pre[i][j][1] = j;
else {
pre[i][j][0] = pre[i-1][j][0];
pre[i][j][1] = pre[i-1][j][1];
}
}
}
int ans = 0;
int x = n, y = k;
for(i=1;i<=k;i++)if(ans<dp[n][i]){
ans = dp[n][i];
x = n, y = i;
}
printf("%d\n",ans);
if(!ans)continue;
while(x+y) {
if(is[x][y])G.push_back(a[x]);
int x1 = pre[x][y][0];
int y1 = pre[x][y][1];
x = x1 , y = y1;
}
for(i=G.size()-1; i>=0; i--){
printf("%d",G[i]);
i?printf(" "):puts("");
}
}
return 0;
}
/*
2
1 2
3
1 2 3 */
Codeforces 10D LCIS 找出最长公共子和产量增加这个序列 dp的更多相关文章
- C#中的字符串处理——找出最长数字子串
百度测试部2015年10月份的面试题之——字符串处理,找出最长的子串. 代码如下: private static string SelectNumberFromString(string input) ...
- hdu 1595 find the longest of the shortest【最短路枚举删边求删除每条边后的最短路,并从这些最短路中找出最长的那条】
find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 最长(大)回文串的查找(字符串中找出最长的回文串)PHP实现
首先还是先解释一下什么是回文串:就是从左到右或者从右到左读,都是同样的字符串.比如:上海自来水来自海上,bob等等. 那么什么又是找出最长回文串呢? 例如:字符串abcdefedcfggggggfc, ...
- FCC JS基础算法题(3):Find the Longest Word in a String (找出最长单词)
题目描述: 在句子中找出最长的单词,并返回它的长度.函数的返回值应该是一个数字. 基本思路,将字符串转换成数组,然后得出数组中单个元素的长度,对长度进行排序,返回最大的一个 代码: function ...
- javascript实现:在N个字符串中找出最长的公子串
'use strict' module.exports = function 找出最长公子串 (...strings) { let setsOfSubstrings = [] strings.redu ...
- 输入n个字符串,找出最长最短字符串(若有个数相同的,都打印出来)
首先,要求找到最长最短字符串,我们应该用数组将其存起来,输入的个数是不固定的,我们就可以用Scanner获取要输入的个数,最终找到的个数也不固定,我们可以封装两个方法,并且返回值类型为数组. 我遇到的 ...
- 给出两个单词(start和end)与一个字典,找出从start到end的最短转换序列
问题 给出两个单词(start和end)与一个字典,找出从start到end的最短转换序列.规则如下: 一次只能改变一个字母 中间单词必须在字典里存在 例如: 给出 start = "hit ...
- 41.找出所有和为S的连续正数序列
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和, 他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数). 没多久,他就得到 ...
- leetcode 5 :Longest Palindromic Substring 找出最长回文子串
题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...
随机推荐
- 一个人ACM(我们赶上了ACM)
时间过得真快,不经意间我已经花了两年的大学生活,现在是时候写的东西.纪念馆两年左右的时间,最近一直在玩博客.我写了一个博客.纪念我们终将逝去的青春. 就从报考说起吧.高考成绩一般,自己选择了土建类的学 ...
- AngularJS html5Mode 使用 SVG Marker失效
接上一篇文章: 问题: 解决了html5Mode的路由问题之后,今天突然发现一个奇怪的问题:项目中使用SVG所画的箭头全都不见了?反复测试之后发现Chrome和Firefox有问题,而IE却可以显示, ...
- AngularJS html5Mode与ASP.NET MVC路由共存
前言 很久之前便听说AngularJS,非常酷,最近也比较火,我也在持续关注这个技术,只是没有认真投入学习.前不久公司找我们部门做一个OA系统(想省下几万大洋的费用),第一时间便想到AngularJS ...
- Android(Lollipop/5.0) Material Design(六) 使用图像
Material Design列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design(二 ...
- 抓取数据同步备份hive
1:创建表 CREATE external TABLE `tbl_spider`( `url` string, `html` string ) partitioned by ( `site` stri ...
- 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)
遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...
- TS流文件
简单介绍编辑 随着从HDTV录制的高清节目在网上的流传,烧友们对TS这个名词大概已经不陌生了.但随之而来就是怎样播放.怎样加入字幕等等的一系列问题.本文将重点介绍一下这方面的应用操作. 先来简要介绍一 ...
- ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
原文:ArcGIS网络分析之Silverlight客户端最近设施点分析(四) 在上一篇中说了如何实现最近路径分析,本篇将讨论如何实现最近设施点分析. 最近设施点分析实际上和路径分析有些相识,实现的过程 ...
- C#命令模式-设计模式学习
命令模式(Command Pattern) 概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变 ...
- Codeforces 442C Artem and Array(stack+贪婪)
题目连接:Codeforces 442C Artem and Array 题目大意:给出一个数组,每次删除一个数.删除一个数的得分为两边数的最小值,假设左右有一边不存在则算作0分. 问最大得分是多少. ...