1. 程式人生 > >HDU 2084 數塔問題(動態規劃入門)

HDU 2084 數塔問題(動態規劃入門)

Description

在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 

有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 

已經告訴你了,這是個DP的題目,你能AC嗎?

Input

輸入資料首先包括一個整數C,表示測試例項的個數,每個測試例項的第一行是一個整數N(1 <= N <= 100),表示數塔的高度,接下來用N行數字表示數塔,其中第i行有個i個整數,且所有的整數均在區間[0,99]內。 

Output

對於每個測試例項,輸出可能得到的最大和,每個例項的輸出佔一行。 

Sample Input

1
5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5

Sample Output

30

程式碼

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int tower[110][110];
int dp[110][110];
int n;
//記憶化搜尋 
int solve(int i,int j){
	if(dp[i][j]>=0) return dp[i][j];//防止重複計算 
	return dp[i][j]=tower[i][j]+(i==n?0:max(solve(i+1,j),solve(i+1,j+1)));
	//dp的思路是這樣,當前的狀態的最優解加上子問題的最優解
	//就這道題來說9到底層和最大的最優解是12或15到底層和最大的最優解
	//以此往下走,走到底層後,返回最最最優解 
}
int main(){
	int t;
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=i;j++)
				cin>>tower[i][j];
		memset(dp,-1,sizeof(dp));//每個節點上的數都>=0,所以用-1來判斷是否已經計算過 
		cout<<solve(1,1)<<endl;
	}
	return 0;
}

相關推薦

HDU 2084 簡單動態規劃

動態 src 2-2 code .cn clas return 技術分享 space 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 題目大意:有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的

hdu 2084 dp 動態規劃

lan 必須 次循環 AC 如果 sin set main turn 開始動態規劃的學習了,先是比較基礎的,很金典的數塔。附上題目鏈接 http://acm.hdu.edu.cn/showproblem.php?pid=2084 這題的狀態轉移方程是 dp[i][

hdu--2084 dp類題目

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2084 題意:我最開始以為是搜尋,想從下往上推,結果明顯不行(方案太多了),暴力肯定也是行不通的,所以千思萬想應該從下往上推。 核心方程:a[i][j]=max(a[i][j]+a[i

HDU 2084 問題動態規劃入門

Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的:  有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?  已經告訴你了,這是個DP的題目,你能AC嗎? Input 輸入資

hdu 2084 dp

很簡單的dp問題。 以下附上ac程式碼 #include<iostream> #include<cmath> #include<cstring> # define max(a,b) ((a)>(b)?(a):(b))//

(HDOJ)動態規劃

Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input

hdoj problem2084 動態規劃

數塔 http://acm.hdu.edu.cn/showproblem.php?pid=2084 Time Limit: 1000/1000 MS (Java/Others)    Memory L

HDU——1176 免費餡餅動態規劃 類似問題

Problem Description 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10米範圍內。餡餅如果掉在了地上當然就不能吃了,所以gam

2084 dp入門

數塔 Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的:  有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和

組中最長的升序子序列動態規劃問題

ace dia mic enc namespace 進行 strong main log The longest Increasing Subsequence (LIS) 給定一個序列,找到這個序列的一個最長的子序列,使得子序列的所有元素是升序的,且元素之間的相對位置不變

[遞推簡單dp]-hdu 2084

[遞推簡單dp]-hdu 2084 數塔 標籤: ACM 題意: 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個

hdu 2084 (DP)

Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input

HUD 1257 最少攔截系統 / HDU 2084 (DP)

這個星期進入DP專題。 先是基本概念。。(摘抄課件,我自重= =) 動態規劃(Dynamic Programming, DP)是解決某一類問題的一種方法,是分析問題的一種途徑,而不是一種特殊演算法(如線性規劃是一種演算法)。因此,在學習動態規劃時,除了對基本概念和方法正確地理解外,應以豐富的想象力去建

hdu 2084問題

數塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 20246    Accepted Submission(

HDU 2084 問題

DP演算法的經典例子 數塔問題 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? #include<stdio.h> #include<iostream> using namespace std

dp 經典動態規劃問題

在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input 輸入資料首先包括一個整數C,表示測試例項

HDU 2084 dp

數塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 43433    Accepted Submissio

藍橋杯 ALGO-3 演算法訓練 K好 動態規劃 DP

如果一個自然數N的K進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是K好數。求L位K進位制數中K好數的數目。例如K = 4,L = 2的時候,所有K好數為11、13、20、22、30、31、33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。

BZOJ4828 AHOI/HNOI2017大佬動態規劃+bfs

math sub pre per 級別 include name map esp   註意到懟大佬的操作至多只能進行兩次。我們逐步簡化問題。   首先令f[i][j]表示第i天結束後自信值為j時至多有多少天可以進行非防禦操作(即恢復自信值之外的操作)。這個dp非常顯然。由於

UVA11584-Partitioning by Palindromes動態規劃基礎

tput form enc rom 結束 tdi ron str 出現 Problem UVA11584-Partitioning by Palindromes Accept: 1326 Submit: 7151Time Limit: 3000 mSec Proble