您的位置:首页 > 其它

NYOJ 171 聪明的kk (dp问题)

2012-08-22 11:37 295 查看
地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=171

思路:dp问题,不过要注意开始的时候下表要考虑好,我是让d[][] 的四周空出一行,这样就不会出错了

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int i,j,N,M;
int map[25][25],d[25][25];
int dp(int N,int M)
{
memset(d,0,sizeof(d));
for(i=0;i<N;i++)
for(j=0;j<M;j++)
if(d[i+1][j]>d[i][j+1])  //即(i,j)位置的下面一个位置(i+1,j)的虫子个数大于(i,j)位置的右面的一个位置(i,j+1)
d[i+1][j+1]=d[i+1][j]+map[i+1][j+1];  //这点不太懂。。。
else
d[i+1][j+1]=d[i][j+1]+map[i+1][j+1];
return d
[M] ;
}
int main()
{
scanf("%d%d",&N,&M);
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
scanf("%d",&map[i][j]);
printf("%d\n",dp(N,M));
system("pause");
return 0;
}


借鉴代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int dp[25][25];
int main()
{
int i,j,m,n;
cin>>m>>n;
memset(dp,0,sizeof(dp));
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
cin>>dp[i][j];
}
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
dp[i][j]=dp[i][j]+max(dp[i-1][j],dp[i][j-1]);//这点表示不太懂,正在研究。。。
}
}
cout<<dp[m]
<<endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: