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

首頁 > 學院 > 開發設計 > 正文

【DP入門】單調遞增最長子序列

2019-11-14 11:50:40
字體:
來源:轉載
供稿:網友

題目來自nyist第17題,詳細如下:

描述

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

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

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

DP解法,找遞推關系:設置dp數組,作為從頭到i的串中遞增序列的最大長度。比如對于序列2、4、1、5, 當考慮到5時,前面dp數組值分別為1、2、1,對2、4、5序列,他的dp值為3,對于1、5序列,dp值為2,取最大值,3作為他的dp值,于是dp數組變為了1、2、1、3;由于總體最大值一定是某一次計算出的值,可以設置一個全局變量max記錄dp數組的最大值,即為所求。如果當前值比前面序列所有值都小則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]) //判斷是否遞增以及通過循環取其中最大值				dp[i]=dp[j]+1;			}			max = max > dp[i] ? max : dp[i];		}		PRintf("%d/n",max);	}	return 0;}經典題目,值得反復思考。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涿州市| 邯郸县| 云梦县| 鲁甸县| 德钦县| 弥勒县| 平泉县| 武冈市| 康马县| 光山县| 本溪| 个旧市| 六枝特区| 洪泽县| 页游| 忻城县| 陇川县| 贵州省| 安康市| 梓潼县| 绍兴县| 康定县| 大同市| 东宁县| 灵川县| 蒙山县| 类乌齐县| 包头市| 即墨市| 鄂州市| 新田县| 楚雄市| 襄城县| 阜阳市| 安国市| 武邑县| 稷山县| 宁河县| 永嘉县| 化隆| 读书|