动态规划的基础题,状态转移方程dy(i,j)=a(i,j)+max{d(i+1,j),d(i+1,j+1)};利用记忆化搜索,简化计算过程。
/*
ID:jzzlee1
PROG:numtri
LANG:C++
*/
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("numtri.in");
ofstream fout("numtri.out");
int a[1001][1001],d[1001][1001];int n;
int dy(int i,int j)
{
if(d[i][j]>=0)
return d[i][j];
return d[i][j]=a[i][j]+(i==n?0:(dy(i+1,j)>dy(i+1,j+1)?dy(i+1,j):dy(i+1,j+1)));
}
int main()
{
memset(a,0,sizeof(a));
memset(d,-1,sizeof(d));
//cin>>n;
fin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
//cin>>a[i][j];
fin>>a[i][j];
for(int i=1;i<=n;i++)
d[n][i]=a[n][i];
//cout<<dy(1,1)<<endl;
fout<<dy(1,1)<<endl;
return 0;
}