POJ1163 The Triangle: 倒三角形问题

经典的DP问题,DP思想也很直接:

直接贴代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 const int max_size=1001;
 7 int n, a[max_size][max_size];
 8 int f[3][max_size];
 9 void initiate(){
10     memset(a,-1,sizeof(a));
11     memset(f,0,sizeof(f));
12     for(int i=1;i<=n;i++){
13         for(int j=1;j<=i;j++){
14             scanf("%d",&a[i][j]);
15         }
16     }
17 }
18 void solve(){
19     int pt_row=n;
20     for(int column=1;column<=n;column++){
21         f[pt_row%2][column]=a[pt_row][column];
22     }
23     for(int row=n-1;row>=1;row--){
24         for(int pt_col=1;pt_col<=row;pt_col++){
25             f[(pt_row-1)%2][pt_col]=a[pt_row-1][pt_col]+max(
26                 f[pt_row%2][pt_col],
27                 f[pt_row%2][pt_col+1]
28             );
29         }
30         --pt_row;
31     }
32     printf("%d\n",f[pt_row%2][1]);
33 }
34 int main(){
35     while(scanf("%d",&n)!=EOF){
36         initiate();
37         solve();
38     }
39     return 0;
40 }

时间: 2024-10-27 19:32:27

POJ1163 The Triangle: 倒三角形问题的相关文章

POJ1163 The Triangle 【DP】

The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36918   Accepted: 22117 Description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed

POJ1163——The Triangle

Description 73 88 1 02 7 4 44 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally

poj1163 The Triangle

The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37931   Accepted: 22779 Description 73 88 1 02 7 4 44 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on

【动态规划初级】动态规划入门 poj1163 The Triangle

动态规划 我在学习算法的时候,就被动态规划搞得是一头雾水,这几日终于是弄明白是怎么回来. 明白之后我才发觉我以前就碰到过一道ACM题,大意是这样的: 有这样形式的一种排列: 例如: 7      3   8    8   1   0  2   7   4   44   5   2   6   5从顶至下找一条路径,使得这条路径上的数字之和最大,而且每一步只能向左下或右下找,直到到最后一行. 比如:第二行的3只能找第三行8或者1. 上面例子的最大一条路径是:7-3-8-7-5;总和30(原题:ht

poj-3176 Cow Bowling &amp;&amp;poj-1163 The Triangle &amp;&amp; hihocoder #1037 : 数字三角形 (基础dp)

经典的数塔模型. 动态转移方程:  dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+p[i][j]; 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <vector> 5 #include <cstring> 6 #include <string> 7 #include <algorithm> 8 #

《算法竞赛入门》-课后习题-Chapter 2

2-1 daffodil水仙花 #include <stdio.h> int main() { int i,a,b,c; for(i=100;i<=999;i++) { a=i/100; b=(i-a*100)/10; c=i-a*100-b*10; if(a*a*a+b*b*b+c*c*c==i) printf("%d\n",i); else continue; } return 0; } 2-2 hanxin韩信 #include <stdio.h>

白书p34 习题2-3 倒三角形 triangle

1 #include<stdio.h> 2 int main() 3 { 4 int n,k,x; 5 scanf("%d",&n); 6 for(k=2*n-1,x=0;k>0,x<n;k-=2,x++) 7 { 8 for(int j=x;j>0;j--) 9 printf(" "); 10 for(int i=k;i>0;i--) 11 printf("*"); 12 printf("\

【HDOJ】1362 The Bermuda Triangle

1. 题目描述给定几个三角形拼成一个百慕大三角形. 2. 基本思路基本思路肯定是搜索,关键点是剪枝.(1) 若存在长度为$l$的边,则一定可以拼成长度为$k \cdot l$的三角形,则可拼成长度为$k \cdot l$的百慕大三角形:(2) 长度超过百慕大三角形的边长的三角形没有任何价值:(3) 百慕大三角形中每个正三角形可以作为正多边形的顶点,倒三角形可以作为倒正三角形的顶点.因此,可以将每个三角形映射到二维坐标,高度为$y$,倒三角形的$x$坐标为偶数,正三角形的$x$坐标为奇数.对于每个

习题2-3 倒三角形-----《竞赛算法入门指导》

#include <iostream> using namespace std; int main() { int n,i,j; cin>>n; for(i=n-1;i>=0;i--) { for(j=0;j<n-(i+1);j++){ cout<<' '; } for(j=n-(i+1);j<n+i;j++){ cout<<'#'; } for(j=n+i;j<2*n;j++){ cout<<' '; } cout<