ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

最长非递减子序列(动态规划)

2021-05-29 10:33:48  阅读:256  来源: 互联网

标签:include 白菜 基因 偏移量 dddd 序列 递减 最长


题目:https://ac.nowcoder.com/acm/contest/11211/A
白菜的基因序列由一串大写英文字母构成,dddd经过严谨的推理证明发现,只有当白菜的基因序列呈按位非递减形式时,这株白菜的高附加值将达到最高,于是优秀的dddd开始着手修改白菜的基因序列,dddd每次修改基因序列的任意位需要的代价是1,dddd想知道,修改白菜的基因序列使其高附加值达到最高,所需要的最小代价的是多少。
输入描述:
第一行一个正整数n(1≤n≤1000000)
第二行一个长度为n的字符串,表示所给白菜的基因序列
保证给出字符串中有且仅有大写英文字母
输出描述:
输出一行,表示最小代价
示例1
输入
5
ACEBF
输出
1
说明
改成ACEEF或者ACEFF,都只用改动一个字符,所需代价最小为1

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s[1001000];
int f[100];
int main(){
	int n,i,j,a=0,b,c;
	scanf("%d",&n);
	scanf("%s",s);
	for(i=0;i<n;i++){
		b=s[i]-'A';
		c=f[b];
		for(j=0;j<b;j++)
		    f[b]=max(f[b],f[j]+1);
		f[b]=max(f[b],c+1);
		a=max(a,f[b]);
	}
	printf("%d",n-a);
	return 0;
}
/*
判断前方有多少个小于当前字符的字符的个数 
再+1,即为最长非递减子序列 
*/ 

变形题:
题目:https://ac.nowcoder.com/acm/contest/11211/C
白菜的基因序列由一串大写英文字母构成,dddd经过严谨的推理证明发现,只有当白菜的基因序列呈按位非递减形式时,这株白菜的高附加值将达到最高,于是优秀的dddd开始着手修改白菜的基因序列,dddd每次可以选择基因序列的一位进行修改,每次当她把一个字母xx修改成yy时,会产生|x-y|∣x−y∣(即xx与yy的ASCIIASCII码差值的绝对值)的改动偏移量,dddd希望,修改白菜的基因序列使其高附加值达到最高,并且基因序列的改动偏移量总和最小,她想知道最小的改动偏移量总和是多少。
输入描述:
第一行一个正整数n(1≤n≤1000000)
第二行一个长度为n的字符串,表示所给白菜的基因序列
保证给出字符串中有且仅有大写英文字母
输出描述:
输出一行,表示最小改动偏移量总和
示例1
输入
复制
5
AEEBC
输出
复制
5
说明
改成AEEEE或ACCCC偏移量总和最小
改成AEEEE,偏移量总和为|B-E|+|C-E|=3+2=5
改成ACCCC,偏移量总和为|E-C|+|E-C|+|B-C|=2+2+1=5
所以最小偏移量总和为5

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
char s[1001000];
int f[1001000][30];
int main(){
	int n,i,j,a=inf,b,c;
	scanf("%d",&n);
	scanf("%s",s+1);
	for(i=1;i<=n;i++){
		b=s[i]-'A';
	    c=inf;
		for(j=0;j<26;j++){
			c=min(c,f[i-1][j]);
			f[i][j]=c+abs(b-j);
		}
	}
	for(i=0;i<26;i++)
	    a=min(a,f[n][i]);
	printf("%d",a);
	return 0;
}
/*
f[i][j]存储前i个字符改变为(j+'A')时的偏移量
i 1--n,依次(最优)累加
j 1--25,每次以上一次的小于当前的最优解(最小偏移量)
        为基,再加上本次偏移量 
*/ 

标签:include,白菜,基因,偏移量,dddd,序列,递减,最长
来源: https://blog.csdn.net/nearal/article/details/117379154

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有