首页 > 代码库 > POJ 1163:The Triangle
POJ 1163:The Triangle
Description
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
题解:最基础的dp,直接记录状态
dp[i][j]表示以第i行第j列开头的三角形的最大值
dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j];
(1) 从后向前递推
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 const int MAXN = 1001; 5 int dp[MAXN][MAXN]; 6 int main() 7 { 8 int n; 9 cin >> n; 10 for (int i = 0; i < n;i++) 11 for (int j = 0; j <= i; j++) 12 cin >> dp[i][j]; 13 for (int i = n - 2; i >= 0;i--) 14 for (int j = 0; j <= i; j++) 15 { 16 dp[i][j] = max(dp[i+1][j],dp[i+1][j+1]) + dp[i][j]; 17 } 18 cout << dp[0][0]; 19 return 0; 20 }
(2) 从前向后递推
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 const int MAXN = 1001; 5 int dp[MAXN][MAXN]; 6 int main() 7 { 8 int n; 9 cin >> n; 10 for (int i = 0; i < n;i++) 11 for (int j = 0; j <= i; j++) 12 cin >> dp[i][j]; 13 for (int i = 0; i < n;i++) 14 for (int j = 0; j <= i; j++) 15 { 16 if (i==0)continue; 17 else if (j == 0)dp[i][j] = dp[i-1][j] + dp[i][j]; 18 else if (j == i)dp[i][j] = dp[i-1][j-1] + dp[i][j]; 19 else dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]) + dp[i][j]; 20 } 21 int ans = 0; 22 for (int j = 0; j < n; j++) 23 ans = max(ans,dp[n-1][j]); 24 cout << ans; 25 return 0; 26 }
POJ 1163:The Triangle
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。