DP:从零开始的动态规划

99封情书 提交于 2019-12-02 06:28:46

从现在开始学习dp

来一个入门的

T1:数字三角形

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。

在上面的样例中,从13到8到26到15到24的路径产生了最大的和86。

【输入】

第一个行包含R(1≤ R≤1000),表示行的数目。

后面每行为这个数字金字塔特定行包含的整数。

所有的被供应的整数是非负的且不大于100。

【输出】

单独的一行,包含那个可能得到的最大的和。

【输入样例】

5  13  11 8  12 7  26  6  14 15 8  12 7  13 24 11

【输出样例】

86
#include<bits/stdc++.h>  #define re register  #define ll long long  using namespace std;  template <typename T> inline void read(T &x)  {      int f=1;x=0;char c=getchar();      for(;c>'9'||c<'0';c=getchar()) if(c=='-') f=-1;      for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);      x*=f;  }  int n;  int a[1011][1011];   int f[1011][1011];   int main()   {       read(n);      for(re int i=1;i<=n;i++)          for(re int j=1;j<=i;j++)              read(a[i][j]);      for(re int i=n;i>=1;i--)          for(re int j=1;j<=i;j++)              f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j];      cout<<f[1][1];      return 0;  }
View Code

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!