nyoj 17-单调递增最长子序列 && poj 2533(动态规划,演算法)
17-单调递增最长子序列
内存限制:64MB
时间限制:3000ms
Special Judge: No
accepted:21
submit:49
题目描述:
如:dabdbf最长递增子序列就是abdf,长度为4
输入描述:
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出描述:
输出字符串的最长递增子序列的长度
样例输入:
3
aaa
ababc
abklmncdefg
样例输出:
1
3
7 nyoj 17 分析(动态规划):
①、要求整体的最大长度,我们可以从局部的最大长度来考虑;
②、从左到右依次考虑,每遇到一个点就从第一位开始遍历到该点,看以这个点作为前缀是否为最大值
③、状态方程:dp[i] = max(dp[i], d[j] + 1); 步骤:
①、从左到右依次遍历每一个点;
②、在该点基础上再从前到后通过 dp[i] = max(dp[i], d[j] + 1) 得出该点最大的值 核心代码:
for(int i = ; i < n; ++ i)
{
dp[i] = ; //初始化每个dp[MAXN];
for(int j = ; j < i; ++ j)
if(s[j] < s[i]) dp[i] = max(dp[i], dp[j] + ); //找出所有满足条件的s[j] ==> dp[i]最大值
ans = max(ans, dp[i]);
}
C/C++代码实现(AC):
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <queue>
#include <set>
#include <map>
#include <stack> using namespace std;
const int MAXN = ; int main ()
{
int t;
scanf("%d", &t);
while(t --)
{
char s[MAXN];
scanf("%s", s);
int len = strlen(s), ans = -0x3f3f3f3f, dp[MAXN];
for(int i = ; i < len; ++ i)
{
dp[i] = ;
for(int j = ; j < i; ++ j)
if (s[j] < s[i])
dp[i] = max(dp[i], dp[j] + );
ans = max(ans, dp[i]);
}
printf("%d\n", ans);
}
return ;
}
※nyoj 17分析(演算法)【推荐】:
①、找出酱紫的序列:从左到右的排列是由ASCⅡ码递增;
②、且每一组相邻的点ASCⅡ之差最小,及就是最为接近 核心代码:
cnt = ; temp[] = s[];
for(int i = ; i < n; ++ i)
{
if(temp[cnt] < s[i]) temp[++cnt] = s[i] // cnt + 1即为所求
else
{
for(int j = ; j <= cnt; ++ j)
{
if(s[i] <= temp[j])
{
temp[j] = s[i];
break;
}
}
}
}
C/C++代码实现(AC):
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <queue>
#include <set>
#include <map>
#include <stack> using namespace std;
const int MAXN = ; int main ()
{
int t;
scanf("%d", &t);
while(t --)
{
char s[MAXN], temp[MAXN];
scanf("%s", s); int len = strlen(s), cnt = ;
temp[] = s[];
for(int i = ; i < len; ++ i)
{
if(temp[cnt] < s[i])
{
temp[++cnt] = s[i];
continue;
} for(int j = ; j <= cnt; ++ j)
{
if(s[i] <= temp[j])
{
temp[j] = s[i];
break;
}
}
}
printf("%d\n", cnt + );
}
return ;
}
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 60426 | Accepted: 27062 |
Description
Your program, when given the numeric sequence, must find the length of its longest ordered subsequence.
Input
Output
Sample Input
7
1 7 3 5 9 4 8
Sample Output
4
※poj 2533 分析(演算法)【推荐】:
①、找出酱紫的序列:从左到右的排列是由ASCⅡ码递增;
②、且每一组相邻的点ASCⅡ之差最小,及就是最为接近.
核心代码:
int temp[] = A[], cnt = ; // cnt + 1 即为所求
for(int i = ; i < n; ++ i)
{
if (temp[cnt] < A[i]) temp[++cnt] = A[i];
else
{
for(int j = ; i <= cnt; ++ j)
{
if(A[i] <= temp[j])
{
temp[j] = A[i]; // 保证序列ASCⅡ之和最小化
break;
}
}
}
}
C/C++代码实现(AC):
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#include <map>
#include <queue> using namespace std;
const int MAXN = ;
int A[MAXN], temp[MAXN]; int main()
{
int n, cnt = ;
scanf("%d", &n);
for(int i = ; i < n; ++ i)
scanf("%d", &A[i]); temp[] = A[];
for(int i = ; i < n; ++ i)
{
if(temp[cnt] < A[i]) temp[++ cnt] = A[i];
else
{
for(int j = ; j <= cnt; ++ j)
{
if(A[i] <= temp[j])
{
temp[j] = A[i];
break;
}
}
}
}
printf("%d\n", cnt + );
return ;
}
nyoj 17-单调递增最长子序列 && poj 2533(动态规划,演算法)的更多相关文章
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
一, 最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...
- nyoj 17 单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- nyoj 题目17 单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- nyoj 单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- 【LCS,LIS】最长公共子序列、单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- NYOJ17,单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf.长度为4 输入 第 ...
- ny17 单调递增最长子序列
单调递增最长子序列时间限制:3000 ms | 内存限制:65535 KB难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- nyoj_17_单调递增最长子序列_201403121516
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- 单调递增最长子序列(南阳理工ACM)
描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理随后的n行,每行有一个字符串,该字符串 ...
随机推荐
- 前端知识点总结——jQuery(上)
1.什么是jQuery jQuery: 第三方的极简化的DOM操作的函数库第三方: 下载极简化: 是DOM操作的终极简化: 1. DOM: 增删改查2. 事件绑定:3. 动画效果:4. Ajax DO ...
- 下载linux历史版本
http://blog.csdn.net/u012453843/article/details/52819756
- JS中==运行机制
1. 判断两边是否有NaN,如果有则一律返回false 2.判断两边是否含有布尔值,如果有的话则将true转化为1,false转化为0. 3.遇到null或者undefined,则不会进行类型转换,它 ...
- cmd 获取当前登录的用户和远程连接的用户
打开cmd 执行 quser 可以看到我有两个 会话 带> 是我当前的会话 rdp 是远程连接的会话 console 是本机操作 可以知道谁在连接你 状态是 唱片 就是未连接的意思 ...
- UI测试之元素定位
定位方式优先级选择: ID>Name>CSS>XPath 1.使用id定位 2.使用name定位 3.使用class定位 4.使用css选择器定位 示例xml: <?xml ...
- “selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities“解决办法
问题: 原因:firefox浏览器版本和浏览器驱动版本不匹配 解决办法:卸载高版本浏览器,安装低版本浏览器 下载地址:http://ftp.mozilla.org/pub/firefox/releas ...
- Java代码优化建议
总结日常Java开发常见优化策略,持续更新. 尽可能使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快,其他变量,如静态变量.实例变量等,都在堆中创建,速度较慢.另外, ...
- 以np.concatenate为主题,谈谈numpy数组按维度合并的问题
1.引言 最近在做多模态融合的图像问题,其中最需要解决的就是不同模态的图像用什么方法进行融合,最简单也最直观的方法就是采用合并数组的方法,将不同模态的图像合并为多通道进行处理.在一些论文中,比如< ...
- 关闭ESlint 语法检测配置方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qappleh/article/detai ...
- django-表单之数据保存(七)
models.py class Student(models.Model): #字段映射,数据库中是male,female,后台显示的是男,女 choices={ ('male',"男&qu ...