栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数字三角形(动态规划、正推、最小路径和)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数字三角形(动态规划、正推、最小路径和)

问题

给定一个数字三角形,从顶至底有多条路径,每一步可沿左斜线向下或沿右斜线向下,路径所经过的数字之和为路径得分,请求出最小路径得分。

输入

数字三角形的行数和数字三角形

输出

最小的路径和

输入样例

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

输出样例

25

问题分析

从顶点开始,自顶向下计算。给定数字三角形a[i][j],1<=i<=n,1<=j<=n. 设dp[i][j]表示从顶点到位置(i,j)的最小路径和,则有dp[i][j]=min(dp[i-1][j-1],dp[i-1][j])+a[i][j],1<=i<=n,1<=j<=n。

完整代码
#include
using namespace std;
const int INF=0x3f3f3f3f; 
long long dp[105][105];
int main(){
	int n;
	long long a[105][105];
	int i,j;
	cin>>n;
	for(i=0;i<=104;i++){
		for(j=0;j<=104;j++){
			a[i][j]=INF; 
			if(i!=0)dp[i][j]=INF;
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=i;j++){
			cin>>a[i][j];
			dp[i][j]=0;
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=i;j++){
			dp[i][j]=min(a[i][j]+dp[i-1][j],a[i][j]+dp[i-1][j-1]);
//			cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971172.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号