生活随笔
收集整理的這篇文章主要介紹了
J - 数塔 HDU - 2084(深搜,记忆化搜索+)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在講述DP算法的時(shí)候,一個(gè)經(jīng)典的例子就是數(shù)塔問(wèn)題,它是這樣描述的: 有如下所示的數(shù)塔,要求從頂層走到底層,若每一步只能走到相鄰的結(jié)點(diǎn),則經(jīng)過(guò)的結(jié)點(diǎn)的數(shù)字之和最大是多少?
已經(jīng)告訴你了,這是個(gè)DP的題目,你能AC嗎? Input 輸入數(shù)據(jù)首先包括一個(gè)整數(shù)C,表示測(cè)試實(shí)例的個(gè)數(shù),每個(gè)測(cè)試實(shí)例的第一行是一個(gè)整數(shù)N(1 <= N <= 100),表示數(shù)塔的高度,接下來(lái)用N行數(shù)字表示數(shù)塔,其中第i行有個(gè)i個(gè)整數(shù),且所有的整數(shù)均在區(qū)間[0,99]內(nèi)。 Output 對(duì)于每個(gè)測(cè)試實(shí)例,輸出可能得到的最大和,每個(gè)實(shí)例的輸出占一行。 Sample Input 1 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Sample Output 30 一開(kāi)始學(xué)長(zhǎng)講這個(gè)題的時(shí)候就聽(tīng)懵逼的,回來(lái)自己研究了一下,發(fā)現(xiàn)還可以。主要是要有從下往上的意識(shí),可以用兩種方法,記憶化搜索和dp,先說(shuō)記憶話(huà)搜索 代碼如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int mp[101][101];
int mk[101][101];
int dp[101][101];
int d[][2]={{1,0},{1,1}};//根據(jù)題意寫(xiě)方向。
int n;
int dfs(int x,int y)
{if(dp[x][y]!=-1) return dp[x][y];if(x==n) dp[x][y]=mp[x][y];//當(dāng)?shù)竭_(dá)最底層的時(shí)候,就要將dp[x][y]更新為mp[x][y].int max_=0;for(int i=0;i<2;i++){int tx=x+d[i][0];int ty=y+d[i][1];//if(tx>n||ty>tx) continue;if(mk[tx][ty]) continue;mk[tx][ty]=1;max_=max(max_,dfs(tx,ty)+mp[x][y]);mk[tx][ty]=0;}return dp[x][y]=max_;/*else{int tx=dfs(x+1,y);int ty=dfs(x+1,y+1);dp[x][y]=max(tx,ty)+mp[x][y];}return dp[x][y];*/
}
int main()
{int m;cin>>m;while(m--){cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)cin>>mp[i][j];memset(dp,-1,sizeof(dp));//因?yàn)橛锌赡苁?,所以一開(kāi)始全為-1。cout<<dfs(1,1)<<endl;}return 0;
}
接下來(lái)就是dp思想了。。其實(shí)比記憶化搜索簡(jiǎn)單,就是個(gè)動(dòng)態(tài)規(guī)劃。 代碼如下:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a[1010][1010];
int dp[1010][1010];
int n;
int main()
{cin>>n;for(int i=0;i<n;i++){for(int j=0;j<=i;j++)cin>>a[i][j];}for(int i=0;i<n;i++)dp[n-1][i]=a[n-1][i];for(int i=n-2;i>=0;i--){for(int j=0;j<=i;j++){dp[i][j]=max(dp[i][j],dp[i+1][j]+a[i][j]);dp[i][j]=max(dp[i][j],dp[i+1][j+1]+a[i][j]);}}cout<<dp[0][0]<<endl;return 0;
}
思路跟記憶化搜索大同小異。個(gè)人推薦第二種,比記憶化搜索簡(jiǎn)單且好想。嘿嘿 努力加油a啊,(o )/~
總結(jié)
以上是生活随笔 為你收集整理的J - 数塔 HDU - 2084(深搜,记忆化搜索+) 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。