TYVJ 1044 数字三角形
来源:互联网 发布:哈长城市群知乎 编辑:程序博客网 时间:2024/04/25 15:02
题目描述
示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大。 每一步可沿左斜线向下或右斜线向下走; 1< 三角形行数< 25; 三角形中的数字为整数< 1000;
输入
第一行为N,表示有N行 后面N行表示三角形每条路的路径权
输出
路径所经过的数字的总和最大的答案
样例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30
典型的动态规划题目,可以把当前位置(i,j)看成是一个状态,然后定义(i,j)的指标函数d(i,j)为从格子(i,j)出发时能得到的最大和(包括(i,j)本身的值),在这个状态下,原问题的解就是d(1,1)的值。从格子(i,j)出发有两种选择。往左斜下走,则走到(i+1,j),则需要计算d(i+1,j)的值。类似的,往右走,则走到(i+1,j+1),需要计算d(i+1,j+1)的值,由于d(i,j)有应尽可能的取较大的值,所以要选择d(i+1,j)和d(i+1,j+1)中较大的一个。得到状态转移方程 d(i,j)=a(i,j)+max{d(i+1,j),d(i+1,j+1)}
#include<iostream>#include<cstdio>using namespace std;const int maxn=110;int a[maxn][maxn],b[maxn][maxn],n;void data_set(){ for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ cin>>a[i][j]; } }}void solve(){ for(int j=1;j<=n;j++) b[n][j]=a[n][j]; for(int i=n-1;i>=1;i--) for(int j=1;j<=i;j++){ if(b[i+1][j+1]>b[i+1][j]) b[i][j]=b[i+1][j+1]+a[i][j]; else b[i][j]=b[i+1][j]+a[i][j]; } cout<<b[1][1];}int main(){freopen("test.txt","r",stdin); freopen("tested.txt","w",stdout); while(cin>>n && n!=0) { data_set(); solve();cout<<endl; } return 0;}
0 0
- Tyvj 1044-数字三角形
- TYVJ 1044 数字三角形
- tyvj数字三角形
- Tyvj专题 数字三角形
- tyvj 1084 数字三角形4
- 数字三角形系列(Tyvj 1044 && 1076 && 1079 && 1084)
- |Tyvj|动态规划|P1044 数字三角形
- Tyvj 1076 数字三角形 要求走到最后mod 100最大
- 数字三角形!
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- AnkhSvn安装及使用
- CBuilder6安装后运行报错,打开工程选项崩溃的处理方法—Win 2008R2或Win7
- centos 桌面没有终端
- 【LeetCode】Distinct Subsequences
- 18个不可不知的有用潜规则
- TYVJ 1044 数字三角形
- (阿里巴巴)服务器简单磁盘自动化脚本
- hdu 2546 dp背包0-1
- su 和 su- 会影响环境变量
- java 线程
- Qt中 QString 和int, char等的“相互”转换
- 不定的工资类
- 解决这九种困扰 可以让你每天精神百倍
- MongoDB学习之旅十三:MongoDB 导入导出