POJ 3176 Cow Bowling 保齡球 數塔問題 DP
Cow Bowling
Description The cows don't use actual bowling balls when they go bowling. They each take a number (in the range 0..99), though, and line up in a standard bowling-pin-like triangle like this:7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Given a triangle with N (1 <= N <= 350) rows, determine the highest possible sum achievable. Input Lines 2..N+1: Line i+1 contains i space-separated integers that represent row i of the triangle. Output Line 1: The largest sum achievable using the traversal rulesSample Input 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Sample Output 30 Hint Explanation of the sample:7 * 3 8 * 8 1 0 * 2 7 4 4 * 4 5 2 6 5 Source |
題意:
從數塔的第一層走到最底層,但只能沿對角線走,求路徑上的數的和的最大值。
分析:
從最底層向上考慮,路徑上的和的大小取決於直接取決於下面兩個數的大小。因而採用自頂向上方法,逐步向上走,走到最頂層,每次都選擇最大的和,這樣最後的結果就儲存在了最頂層。
狀態轉移方程:dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+A[i][j];
程式碼:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_N = 400;
int dp[MAX_N][MAX_N];
int N, A[MAX_N][MAX_N];
void solve() {
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= N; i++) dp[N][i] = A[N][i];
for(int i = N-1; i >= 1; i--)
for(int j = 1; j <= i; j++)
dp[i][j] = A[i][j]+max(dp[i+1][j], dp[i+1][j+1]);
printf("%d\n", dp[1][1]);
}
int main() {
while(~scanf("%d", &N)) {
for(int i = 1; i <= N; i++)
for(int j = 1; j <= i; j++)
scanf("%d", &A[i][j]);
solve();
}
return 0;
}
相關推薦
POJ 3176 Cow Bowling 保齡球 數塔問題 DP
Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14044 Accepted: 9310 D
POJ 3176 Cow Bowling (簡單dp——數塔問題)
題意:其實就是數塔問題,找出一條加和最大的路徑,輸出最大和; 題解:data[i][j]=max(data[i-1][j],data[i-1][j-1])+data[i][j];
POJ-3176 Cow Bowling
efault tar rsa when def represent amp tin n+1 Language: Default Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Su
3176 Cow Bowling解題報告(求三角形數最大路)
社團裡以前做過。 #include<iostream> #include<string.h> using namespace std; int n; int dp[400][
poj3176Cow Bowling數塔——dp
Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16987 Accepted: 11323 Description The cows d
hdu 2084 數塔 dp 動態規劃
lan 必須 次循環 AC 如果 sin set main turn 開始動態規劃的學習了,先是比較基礎的,很金典的數塔。附上題目鏈接 http://acm.hdu.edu.cn/showproblem.php?pid=2084 這題的狀態轉移方程是 dp[i][
HDU 1176 免費餡餅(數塔DP)
免費餡餅 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s):
POJ-2184 Cow Exhibition 【動態規劃DP+01揹包變換】
題目傳送門 題目:共有N頭牛,接下來N行是每頭牛的智商和情商,從這些牛中任意選取若干頭牛,使得牛的智商和+情商和最大,同時智商和(TS),情商和(TF)都不小於0。 題解:以智商作為容量,求前i頭牛在智商為j的情況下的最大情商 。因為有負數,所以容量擴大100000,修改dp陣
hdu 2084 數塔(DP)
Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input
HDU 數塔 dp
Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Inp
HUD 1257 最少攔截系統 / HDU 2084 數塔 (DP)
這個星期進入DP專題。 先是基本概念。。(摘抄課件,我自重= =) 動態規劃(Dynamic Programming, DP)是解決某一類問題的一種方法,是分析問題的一種途徑,而不是一種特殊演算法(如線性規劃是一種演算法)。因此,在學習動態規劃時,除了對基本概念和方法正確地理解外,應以豐富的想象力去建
hd 2084 數塔(dp)
原題連結 #include<stdio.h> int main() { int a[110][110],t,n,i,j; while(scanf("%d",&t)!=EOF) { while(t--) {
數塔——DP演算法
在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 動態規劃問題 顯然動態轉移方程為:dp[i][j]=max(dp[i+1]
HD 2048 數塔 DP(簡單遞推)
Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Inp
HDU 2084 數塔 dp
數塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 43433 Accepted Submissio
POJ 3176(動態規劃:數塔問題)
數塔問題,比較基礎。 #include<iostream> #include<cstdio> #include<algorithm> using namespa
POJ Cow Bowling(dp)
Description The cows don’t use actual bowling balls when they go bowling. They each take a numb
數字三角形/數塔問題(DP入門題)
cstring scan iostream 動態規劃 bubuko 規劃 pri 技術分享 輸入 有形如下圖所示的數塔,從頂部出發,在每一結點可以選擇向左走或是向右走,一起走到底層,要求找出一條路徑,使路徑上的值最大。 樣例輸入: 5 13 11 8 12 7 26 6
洛谷P1216數塔(逆向遞推遞歸+記憶化,dp)
根據 初始 als out 有一個 type lse ++ 遞歸 題目鏈接:https://www.luogu.org/problemnew/show/P1216 題目很簡單,是dp和記憶化搜索的入門練手好題 有一個坑點,全為0的時候,記憶化沒初始化為其它值的話,還是暴
HDU1176 DP 數塔
很大的 數塔 space 和我 lse printf 累加 最大 數據 看了大牛的代碼後恍然大悟,然後自己開始寫,WA了一下午! 這裏有兩個坑,讓我找了一下午! AC代碼: #include <iostream>#include <stdio.h>#