hdu2084 DP入门

来源:互联网 发布:淘宝上的牵引器有用吗 编辑:程序博客网 时间:2024/06/03 12:37

题目链接:点击打开链接

这题和白皮的数字三角形是一样的。有很多题都是这个的变形比如1176

递归:

#include <iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1e2+10;int a[maxn][maxn],d[maxn][maxn],n;int dp(int i,int j){    if(d[i][j]>0)return d[i][j];    return d[i][j]=a[i][j]+(i==n?0:max(dp(i+1,j),dp(i+1,j+1)));}int main(){   int t,i,j;   scanf("%d",&t);   while(t--)   {       scanf("%d",&n);       for(i=1;i<=n;i++)        for(j=1;j<=i;j++)        scanf("%d",&a[i][j]);        memset(d,-1,sizeof(d));    printf("%d\n",dp(1,1));   }    return 0;}
递推:

#include <iostream>#include <stdio.h>#include<cstring>using namespace std;const int maxn=1e2+10;int a[maxn][maxn],flag[maxn],b[maxn][maxn];int main(){    int t,n,i,j;    while(cin>>t)    {        while(t--)        {            cin>>n;            memset(b,0,sizeof(b));            memset(a,0,sizeof(a));            for(i=1; i<=n; i++)                for(j=1; j<=i; j++)                    cin>>a[i][j];            for(i=1; i<=n; i++)                for(j=1; j<=i; j++)                    b[i][j]=max(b[i-1][j],b[i-1][j-1])+a[i][j];            int Max=0;            for(i=1; i<=n; i++)                if(Max<b[n][i])Max=b[n][i];            cout<<Max<<endl;        }    }    return 0;}


原创粉丝点击