動態規劃的基礎題,狀態轉移方程dy(i,j)=a(i,j)+max{d(i+1,j),d(i+1,j+1)};利用記憶化搜索,簡化計算過程。ios
/* 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; }