K - FatMouse and Cheese

最近一直在写dp,然后别的就啥也不管了(wtcl),很明显的最简单的搜索题竟然卡了,一开始的思路是每一个格子都只能是从四周的格子转化过来的,只要找到四周最大的那个那么dp[i][j]=max+a[i][j],但是无法确定四周的状态,不知道i,j该怎么开始,所以就卡了,竟然不往搜索上去想,emmmm,希望记住一下,看cls的ppt,说刷1000道poj的傻逼题还是个傻逼,但是现在连傻逼题都写不出来。

 #include <iostream>
#include <cstring>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <stack>
#include <queue>
using namespace std;
typedef long long ll;
int n,k;
int dp[+][+];
int a[+][+];
int d[][]={{,},{,-},{,},{-,}};
int dfs(int x,int y)
{
int maxn=;
if(dp[x][y]!=) return dp[x][y];
for(int i=;i<=;i++)
{
for(int j=;j<=k;j++)
{
int dx=x+d[i][]*j;
int dy=y+d[i][]*j;
if(dx>=&&dx<=n&&dx>=&&dy<=n&&a[x][y]<a[dx][dy])
{
int t=dfs(dx,dy);
if(t>maxn)
maxn=t;
}
}
}
dp[x][y]=maxn+a[x][y];
return dp[x][y];
} int main()
{
while(cin>>n>>k)
{
if(n==-&&k==-) break;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
cin>>a[i][j];
}
memset(dp,,sizeof(dp));
cout <<dfs(,)<<endl;
}
return ;
}
上一篇:setParameter不支持传统的按位置查询方式


下一篇:JavaScript基础-3