P1216 洛谷 数字三角形
题目描述
思路
简单小dp
和那个走象棋,但不能走马要吃到的位置的那个一样,甚至比那个还简单
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int f[N][N];
int a[N][N];
int main()
{
int n;
cin >> n; //其实也可以不用置0,因为本来初始化的时候就是0了
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= i; j++)
{
if(j == 0)
{
f[i][j] = 0;
}
else
cin >> f[i][j];
}
for(int j = i + 1; j <= n; j++)
{
f[i][j] = 0;
}
//对于每个阶段,唯一使用的数据是 a[i][j] 而不使用其后输入的数据,则可以将两个二重循环并为一个,即一边输入 a[i][j] 一边计算 f[i][j]。
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++) //加等号
{
a[i][j] = max(a[i - 1][j], a[i - 1][j-1]) + f[i][j]; //再加上当前这个数
}
//
}
int ans = -1e6;
for(int i = 1; i <= n; i++)
{
//cout<<a[n][i]<<endl;
ans = max(a[n][i], ans);
}
cout<<ans<<endl;
return 0;
}
总结
就是道板子题