日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态规划训练24 [Phalanx HDU - 2859 ]

發(fā)布時(shí)間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划训练24 [Phalanx HDU - 2859 ] 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Phalanx

? HDU - 2859?

這是一道非常好的題目,我實(shí)在是沒想到該怎么做,看了一下大神的題解才恍然大悟(還有這種操作?)

由于對(duì)稱矩陣是以對(duì)稱軸進(jìn)行對(duì)稱的(廢話),所以我們可以用dp[i][j]表示(i,j)所經(jīng)過的主軸線,并且以(i,j)為左下角的最大的對(duì)稱矩陣。

這樣的話,我們?cè)倏紤]左下方的一個(gè)元素(i+1,j-1),如果從這個(gè)點(diǎn)出發(fā)向上有k個(gè)元素與從這個(gè)點(diǎn)出發(fā)向右的k個(gè)元素對(duì)應(yīng)相等。

我們接著考慮k的大小,如果k剛好等于dp[i][j],那么這個(gè)對(duì)稱矩陣可以繼續(xù)擴(kuò)大

這樣的話,我們可以得到遞推方程dp[i+1][j-1] = dp[i][j] + 1

如果k < dp[i][j]的話,那么

dp[i-1][j+1] = min(k+1,dp[i][j + 1]);

AC代碼

#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; int n; const int MAX = 1003; int mtx[MAX][MAX]; int dp[MAX][MAX]; int main(){while(scanf("%d",&n) && n){memset(dp,0,sizeof(dp));for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){scanf(" %c",&mtx[i][j]);}}int ans = 1;for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){dp[i][j] = 1;int cnt = 0;for(int t = 1;t < min(i,n-j+1);t++){if(mtx[i-t][j] != mtx[i][j+t])break;cnt++;if(cnt > dp[i-1][j+1])break;}dp[i][j] = min(dp[i-1][j+1] + 1,cnt+1);ans = max(ans,dp[i][j]);}}cout<<ans<<endl;}return 0; }

總結(jié)

以上是生活随笔為你收集整理的动态规划训练24 [Phalanx HDU - 2859 ]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。