首页 > 代码库 > HDU_2571_DP

HDU_2571_DP

http://acm.hdu.edu.cn/showproblem.php?pid=2571

 

简单dp,从上到下,从左到右依次更新每一格的最大幸运值。

 

#include<iostream>#include<cstdio>#include<queue>#define MIN -0x3f3f3f3fusing namespace std;int a[25][1005],maxx[25][1005],n,m;int main(){    int T;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&n,&m);        for(int i = 1;i <= n;i++)        {            for(int j = 1;j <= m;j++)    scanf("%d",&a[i][j]);        }        for(int i = 0;i <= n;i++)        {            for(int j = 0;j <= m;j++)    maxx[i][j] = MIN;        }        maxx[1][0] = 0;        maxx[0][1] = 0;        for(int i = 1;i <= n;i++)        {            for(int j = 1;j <= m;j++)            {                maxx[i][j] = max(maxx[i][j-1],maxx[i-1][j])+a[i][j];                for(int k = j/2;k >= 1;k--)                {                    if(j%k)    continue;                    maxx[i][j] = max(maxx[i][j],maxx[i][k]+a[i][j]);                }            }                    }        printf("%d\n",maxx[n][m]);    }    return 0;    }

 

HDU_2571_DP