您的位置:首页 > 其它

HDUOJ----2571(命运)(简单动态规划)

2014-05-10 09:48 162 查看

命运

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8600 Accepted Submission(s): 3032

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxn -0x3f3f3f3f
int dp[21][1001],sum[21][1001];
int max(int a ,int b){
if(a>b) return a;
return b;
}
int main()
{
int c,n,m,k,i,j;
scanf("%d",&c);
while(c--){
scanf("%d%d",&n,&m);
for(i=1; i<=n;i++){
for(j=1;j<=m;j++){
scanf("%d",&dp[i][j]);
}
}
// memset(sum,0,sizeof(sum));
//对边缘进行必要地初始化....
for(i=0;i<=n;i++)   sum[i][0]=maxn;
for(i=1;i<=m;i++)   sum[0][i]=maxn;
sum[1][0]=sum[0][1]=0;
for( i=1 ; i<=n ; i++ ){
for( j=1 ; j<=m ; j++ ){
//选择是向下还是向右进行行走.......
sum[i][j]= max( sum[i-1][j],sum[i][j-1] )+ dp[i][j];
//对于向右行走,该怎么走.......
int ks=2;
while(j>=ks){
if(j%ks==0)   //比较它们的倍数
sum[i][j] = max( sum[i][j] , sum[i][j/ks]+dp[i][j] ) ;
ks++;     //所有的倍数.....
}
}
}
printf("%d\n",sum
[m]);
}
return 0;
}


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