hdu-2571

来源:互联网 发布:mac怎么切换全角半角 编辑:程序博客网 时间:2024/05/24 05:31

入门的DP 可是我更入门...

根据题目要求,只能向右或者向下走,向下一次只能走一格。但是如果向右走,则每次可以走一格或者走到该行的列数是当前所在列数倍数的格子,即:如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) 其中k>1。 

由于幸运值可能为负值,所以初始化dp数组为负数


#include <algorithm>#include <string.h>#include <sstream>#include <stdlib.h>#include <malloc.h>#include<bitset>using namespace std;int p[25][1010];int dp[25][1010];int main(){    int t;    scanf ("%d",&t);    while (t--)    {        int n,m;        scanf ("%d%d",&n,&m);        for (int i=1;i<=n;i++)            for (int j =1;j<=m;j++)            scanf("%d",&p[i][j]);        for (int i=0;i<=n;i++)            for (int j =0;j<=m;j++)                dp[i][j]=-99999999;        dp[1][0]=dp[0][1]=0;        for (int i =1;i<=n;i++)            for (int j=1;j<=m;j++)        {            dp[i][j]=max( dp[i-1][j],dp[i][j-1] );            for (int k=2;k<=j;k++)            {                if (j%k==0)                dp[i][j]=max(dp[i][j],dp[i][j/k]);            }            dp[i][j]+=p[i][j];        }        printf("%d\n",dp[n][m]);    }    return 0;}


0 0
原创粉丝点击