您的位置:首页 > 其它

走方格改进版dp

2014-03-26 11:46 113 查看
题目:

H - 命运
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit Status

Description

穿过幽谷意味着离大魔王lemon已经无限接近了!
可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关。要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑!
可怜的yifenfei为了去救MM,义无返顾地跳进了迷宫。让我们一起帮帮执着的他吧!
命运大迷宫可以看成是一个两维的方格阵列,如下图所示:

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

int num[1002][501];
int a[1002][1002];

int main()
{
num[1][0]=0;
num[2][0]=1;
for(int i=3;i<=1000;i++)
{
int k=0;
for(int j=1;j<=i/2;j++)
{
if(i%j==0)
num[i][k++]=j;
}
}
int t;
int n,m;
//freopen("aa.txt","r",stdin);
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=2;i<=m;i++)
{
int x=a[1][i-1];
int k=0;
while(num[i][k]!=0)
{
if(x<a[1][num[i][k]])
x=a[1][num[i][k]];
k++;
}
a[1][i]+=x;
}
for(int i=2;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(j==1)
a[i][j]+=a[i-1][j];
else
{
int x=max(a[i][j-1],a[i-1][j]);
int k=0;
while(num[j][k]!=0)
{
if(x<a[i][num[j][k]])
x=a[i][num[j][k]];
k++;
}
a[i][j]+=x;
}
}
}
printf("%d\n",a
[m]);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: