首页 > 代码库 > hdu 2391 Filthy Rich

hdu 2391 Filthy Rich

简单dp 水一个

处理点的时候,第一行和第一列特殊处理;

<span style="font-size:24px;">其余的w[i][j]=show(w[i-1][j-1],w[i-1][j],w[i][j-1])+s[i][j];</span>

<span style="font-size:24px;">#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
int s[1005][1005];
int w[1005][1005];//存每个点的最大值
int show(int q,int w,int e)
{
    int t;
    if(q>w)
        t=q;
    else
        t=w;
    return t>e?t:e;
}
int main()
{
    int a;
    scanf("%d",&a);
    int time=0;
    int b,c;
    int t=a;
    while(t--)
    {
        time++;
        scanf("%d %d",&b,&c);
        for(int i=0;i<b;i++)
            for(int j=0;j<c;j++)
              scanf("%d",&s[i][j]);
        memset(w,0,sizeof(w));
        for(int i=0;i<b;i++)
            for(int j=0;j<c;j++)
            {
                if(i==0)
                {
                    if(j==0)
                       w[i][j]=s[i][j];
                    else
                        w[i][j]=w[i][j-1]+s[i][j];
                    continue;
                }
                if(j==0)
                {
                    w[i][j]=w[i-1][j]+s[i][j];continue;
                }
                w[i][j]=show(w[i-1][j-1],w[i-1][j],w[i][j-1])+s[i][j];
            }
        printf("Scenario #%d:\n%d\n",time,w[b-1][c-1]);
        //if(time!=a)
            printf("\n");
    }
    return 0;
}
</span>