http://acm.hdu.edu.cn/showproblem.php?pid=1078
分析:水一下~~
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int NM=105;
int d[4][2]={-1,0,1,0,0,-1,0,1};
int dp[NM][NM],a[NM][NM],n,k;
inline int max(int x,int y){
return x>y?x:y;
}
int DFS(int x,int y)
{
int x1,y1,i,j;
if(dp[x][y]) return dp[x][y];
dp[x][y]=a[x][y]; //
for(j=1;j<=k;j++){ //
for(i=0;i<4;i++){
x1=x+d[i][0]*j;y1=y+d[i][1]*j;
if(x1>0&&x1<=n && y1>0&&y1<=n && a[x1][y1]>a[x][y]){
dp[x][y]=max(dp[x][y],a[x][y]+DFS(x1,y1));
}
}
}
return dp[x][y];
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&k) &&n!=-1&&k!=-1){
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
memset(dp,0,sizeof(dp));
DFS(1,1);
printf("%d\n",dp[1][1]);
}
return 0;
}
http://poj.org/problem?id=1088
分析:暴搜啊
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int NM=105;
int a[NM][NM],dp[NM][NM],n,m;
int d[4][2]={-1,0,1,0,0,-1,0,1};
inline int max(int x,int y){
return x>y?x:y;
}
int DFS(int x,int y)
{
int x1,y1,i;
if(dp[x][y]) return dp[x][y];
dp[x][y]=1;
for(i=0;i<4;i++){
x1=x+d[i][0];y1=y+d[i][1];
if(x1>0&&x1<=n && y1>0&&y1<=m && a[x][y]>a[x1][y1])
{
dp[x][y]=max(dp[x][y],1+DFS(x1,y1));
}
}
return dp[x][y];
}
int main()
{
int i,j,mmax;
while(~scanf("%d%d",&n,&m)){
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
memset(dp,0,sizeof(dp));
mmax=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
DFS(i,j);
if(mmax<dp[i][j]) mmax=dp[i][j];
}
printf("%d\n",mmax);
}
return 0;
}