最長公共子串行 最長遞增子串行 最長遞增公共子串行

2021-07-30 09:02:27 字數 1853 閱讀 6703

//求最長公共子串行

int dp[maxn][maxn];

int a[maxn],b[maxn];

int main()

else

dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}

printf("%d\n",dp[m][n]);

return

0;}

//輸出最長公共子串行

int dp[maxn][maxn];

int d[maxn][maxn];

int a[maxn],b[maxn],ans[maxn];

int main()

else

else}}

}i=m,j=n;

int k=dp[m][n]-1;

while(k>=0&&i>0&&j>0)

else

if(d[i][j]==2)

i-- ;

else

if(d[i][j]==1)

j--;

else

break;

}printf("%d\n",dp[m][n]);

for(i=0;im][n];i++)

printf("%d ",ans[i]);

printf("\n");

return

0;}

//求最長上公升子串行

int a[maxn],dp[maxn];

int main()

}res=max(res,dp[i]);

}printf("%d\n",res);

return

0;}

//最長上公升子串行優化(利用二分查詢lower_bound()函式)

//查詢優化到0(log(n))

int a[maxn],dp[maxn];

#define inf 0x3f3f3f

int main()

printf("%d\n",lower_bound(dp,dp+m,inf)-dp);

return

0;}

//求最長遞增公共子串行(時間複雜度為0(n^3))

int dp[maxn][maxn];   //dp[i][j]代表陣列 a 前 i 個,陣列 b 前 j 個且以 b[j] 為結尾的lcis

int a[maxn],b[maxn];

int main()}}

}int ans=0;

for(i=1;i<=n;i++)

ans=max(ans,dp[m][i]);

printf("%d\n",ans);

return

0;}

//最長遞增公共子串行優化(時間上)

int dp[maxn][maxn];

int a[maxn],b[maxn];

int main()

}int ans=0;

for(i=1;i<=n;i++)

ans=max(ans,dp[m][i]);

printf("%d\n",ans);

return

0;}

//最長遞增公共子串行優化(空間上)

int dp[maxn];

int a[maxn],b[maxn];

int main()

}int ans=0;

for(i=1;iprintf("%d\n",ans);

return

0;}

最長公共子串行 最長遞增子串行

最長公共子串行 dp 杭電1159 include using namespace std string str1,str2 int dp 1005 1005 intlcs return dp str1.size str2.size int main 最長遞增子串行 杭電1257 include u...

最長遞增子串行 最長公共子串行 最長公共子串

最長遞增子串行a 給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6.輸入描述 第一行包含乙個整數t,代表測試資料組數。對於每組測試資料 n 陣列的長度 a1 a2 an 需要計算的陣列 保證 1 n...

最長公共遞增子串行

題目描述小h最近看了諜戰電影,對裡面訊息的加密方式很感興趣,他決定和朋友試一試,小h給朋友兩個序列,兩個序列的最長公共單調遞增子串行就是要傳遞的訊息,有時候序列太長了,小h的朋友找不出來,所以他找到了你 輸入第乙個數字n表示序列長度 後面兩行每行n個數字表示小h給出的兩個序列 n 1000 輸出輸出...