P1044 数字三角形
时间: 1000ms / 空间: 131072KiB / Java类名: Main
背景
09年 USACO 11月月赛 铜牌第一道
描述
示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路
径,使该路径所经过的数字的总和最大。
每一步可沿左斜线向下或右斜线向下走;
1<三角形行数<25;
三角形中的数字为整数<1000;
输入格式
第一行为N,表示有N行
后面N行表示三角形每条路的路径权
输出格式
路径所经过的数字的总和最大的答案
测试样例1
输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
30
备注
搜索80分,记忆化搜索AC
记忆化搜索,从后往前访问。对于每一个点正常往下走时有两种不同走法,于是从上往下走时只需逆推即可。所以对于a[i][j]而言,只需加上a[i+1][j]与a[i+1][j+1]中的最大值。不断循环最后得到最大值为a[1][1]。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int a[30][30],n; 7 int main() 8 { 9 cin>>n; 10 for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)scanf("%d",&a[i][j]); 11 for(int i=n-1;i>=0;i--) 12 { 13 for(int j=1;j<=i;j++) 14 { 15 a[i][j]+=max(a[i+1][j+1],a[i+1][j]); 16 } 17 } 18 cout<<a[1][1]<<endl; 19 return 0; 20 }
P1076 数字三角形2
时间: 1000ms / 空间: 131072KiB / Java类名: Main
描述
数字三角形
要求走到最后mod 100最大
输入格式
第1行n,表示n行 <=25
第2到n+1行为每个的权值
输出格式
mod 100最大值
测试样例1
输入
2
1
99 98
输出
99
这题tyvj的数据非常诡异,想骗分的朋友输出99会发现自己奇妙的得了90分。
时间: 2025-01-14 22:02:51