动态规划的记忆搜索与递推

来源:互联网 发布:企业用电管理系统源码 编辑:程序博客网 时间:2024/04/29 20:01
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 10;int n;int d[maxn][maxn],a[maxn][maxn];int ans;int dp1(int i, int j) {if(d[i][j] >= 0)return d[i][j];else return d[i][j] = a[i][j] + ( i == n - 1 ? 0 :max( dp1(i+1,j), dp1(i+1,j+1) ) );}int dp2() {for(int i = 0; i < n; i++)d[n-1][i] = a[n-1][i];for(int i = n - 2; i >= 0; i--)for(int j = 0; j <= i; j++)d[i][j] = a[i][j] + max(d[i+1][j],d[i+1][j+1]);}int main() {while(scanf("%d",&n) != EOF  && n) {for(int i = 0; i < n; i++)for(int j = 0; j <= i; j++) scanf("%d",&a[i][j]);dp2();printf("%d\n",d[0][0]);memset(d,-1,sizeof(d));ans = dp1(0,0);printf("%d\n",ans);printf("%d\n",d[0][0]);}return 0;}


0 0