国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【DP入門】單調(diào)遞增最長子序列

2019-11-14 11:17:28
字體:
供稿:網(wǎng)友

題目來自nyist第17題,詳細(xì)如下:

描述

求一個(gè)字符串的最長遞增子序列的長度如:dabdbf最長遞增子序列就是abdf,長度為4輸入第一行一個(gè)整數(shù)0<n<20,表示有n個(gè)字符串要處理隨后的n行,每行有一個(gè)字符串,該字符串的長度不會(huì)超過10000輸出

輸出字符串的最長遞增子序列的長度

經(jīng)典題目,與最大和連續(xù)子串有相似之處,但是這里的子序列是可以不連續(xù)的。

DP解法,找遞推關(guān)系:設(shè)置dp數(shù)組,作為從頭到i的串中遞增序列的最大長度。比如對(duì)于序列2、4、1、5, 當(dāng)考慮到5時(shí),前面dp數(shù)組值分別為1、2、1,對(duì)2、4、5序列,他的dp值為3,對(duì)于1、5序列,dp值為2,取最大值,3作為他的dp值,于是dp數(shù)組變?yōu)榱?、2、1、3;由于總體最大值一定是某一次計(jì)算出的值,可以設(shè)置一個(gè)全局變量max記錄dp數(shù)組的最大值,即為所求。如果當(dāng)前值比前面序列所有值都小則dp為1。

代碼如下:

#include<stdio.h>char s[10000+5];int dp[10000+5];int main(){	int T;	scanf("%d",&T);	while(T--)	{		scanf("%s",s);		int max=-1;			for(int i=0;i<strlen(s);i++)		{			dp[i]=1;			for(int j=0;j<i;j++)			{				if(s[i]>s[j] && dp[j]+1>dp[i]) //判斷是否遞增以及通過循環(huán)取其中最大值				dp[i]=dp[j]+1;			}			max = max > dp[i] ? max : dp[i];		}		PRintf("%d/n",max);	}	return 0;}經(jīng)典題目,值得反復(fù)思考。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娄底市| 灯塔市| 屏东市| 永昌县| 福贡县| 东宁县| 资中县| 迁西县| 赤峰市| 伊宁县| 正阳县| 鹤壁市| 高青县| 上杭县| 子洲县| 蕲春县| 沈阳市| 广安市| 漳浦县| 武功县| 伽师县| 荣昌县| 武清区| 连江县| 安岳县| 遂宁市| 淮阳县| 珠海市| 汝阳县| 日照市| 鹤岗市| 红原县| 手机| 平果县| 南丰县| 禄劝| 荥阳市| 滨州市| 茂名市| 衡阳县| 灌云县|