您的位置:首页 > 其它

【动态规划】数字三角形3

2018-07-02 15:59 148 查看

【题目描述】

数字三角形必须经过某一个点,使之走的路程和最大

【输入格式】

第1行n,表示n行 <=25
第2到n+1行为每个的权值
程序必须经过n div 2,n div 2这个点

【输出格式】

最大值

【分析】

其实也有非常多的做法。

做法一:我们找出从(1,1)到(n div 2,n div 2)的最大值,在找出从(n div 2,n div 2)到底部的最大值,加在一起也是最优解。

做法二:我们在(n div 2,n div 2)上加上一个非常大的数,然后普通的数字三角形做一下就可以了,最后把大数减掉就可以了。

【代码】

const
maxn=10000000;
var
n,i,j:longint;
f,a:array[0..25,0..25]of longint;
function max(n,m:longint):longint;
begin
if n>m then exit(n) else exit(m);
end;
begin
fillchar(f,sizeof(f),0);
readln(n);
for i:=1 to n do
for j:=1 to i do
begin
read(a[i][j]);
f[i][j]:=a[i][j];
end;
inc(f[n div 2][n div 2],maxn);
for i:=n downto 1 do
for j:=1 to i do
f[i][j]:=max(f[i+1][j],f[i+1][j+1])+f[i][j];
writeln(f[1][1]-maxn);
end.

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: