数字三角形2

【题目描述】

数字三角形
要求走到最后mod 100最大

【输入格式】

第1行n,表示n行 <=25
第2到n+1行为每个的权值

【输出格式】

mod 100最大值

【分析】

设置状态f[i][j][k]表示(i,j)各自内是否mod 100可以为k。

状态转移方程:

f[i][j][k]=f[i+1][j][k+a[i+1][j]mod 100]  || f[i+1][j+1][k+a[i+1][j+1]mod 100]

一开始把f[1][1][a[1][1]]设置为true

【代码】

 1 var
 2   f:array[0..25,0..25,0..99]of boolean;
 3   a:array[0..25,0..25] of longint;
 4   n,i,j,k:longint;
 5 function max(n,m:longint):longint;
 6   begin
 7     if n>m then exit(n) else exit(m);
 8   end;
 9 begin
10   fillchar(f,sizeof(f),false);
11   readln(n);
12   for i:=1 to n do 
13     for j:=1 to i do read(a[i][j]);
14   f[1][1][a[1][1]mod 100]:=true;
15   for i:=2 to n do 
16     for j:=1 to i do
17       for k:=0 to 99 do 
18       begin
19         if f[i-1][j][k] then f[i][j][(k+a[i][j])mod 100]:=true;
20         if f[i-1][j-1][k] then f[i][j][(k+a[i][j])mod 100]:=true;
21       end;
22   for i:=99 downto 0 do 
23     for j:=1 to n do 
24       if f[n][j][i] then 
25       begin
26         writeln(i);
27         halt;
28       end;
29 end.

猜你喜欢

转载自www.cnblogs.com/Dawn-Star/p/9253975.html
今日推荐