hdu 1078记忆化搜索

来源:互联网 发布:怎么查看自己淘宝几心 编辑:程序博客网 时间:2024/05/21 11:23
s[i][j]表示i,j处的最大值,s[i][j] = {s[i-k][j],s[i+k][j],s[i][j-k],s[i][j+k]}+ a[i][j]用记忆化搜索,解为s[0][0]#include <iostream> #include <cmath>#include <cstring>using namespace std;int n,k;int s[101][101];int a[101][101];int dirX[4] = {-1,0,1,0};int dirY[4] = {0,1,0,-1};int DP(int x,int y){int sum;int max1 = 0;if(s[x][y] > 0)return s[x][y];for(int i = 1; i <= k; i++){for(int j = 0; j < 4; j++){int xx = x + dirX[j]*i;int yy = y + dirY[j]*i;if(xx >= 0 && xx < n && yy >= 0 && yy < n && a[xx][yy] > a[x][y]){sum = DP(xx,yy);max1 = max(sum,max1);}}}s[x][y] = max1 + a[x][y];return s[x][y];}int main(){while(cin>>n>>k){if(n == -1 && k == -1)break;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){cin>>a[i][j];}}memset(s,0,sizeof(s));int ans = DP(0,0);cout<<ans<<endl;}return 0;} 

原创粉丝点击