标签:content mes contains block maximum sample mem -- math.h
InputThere are several test cases. Each test case consists of
a line containing two integers between 1 and 100: n and k
n lines, each with n numbers: the first line contains the number of blocks of cheese at locations (0,0) (0,1) ... (0,n-1); the next line contains the number of blocks of cheese at locations (1,0), (1,1), ... (1,n-1), and so on.
The input ends with a pair of -1‘s.
OutputFor each test case output in a line the single integer giving the number of blocks of cheese collected.
Sample Input
3 1 1 2 5 10 11 6 12 12 7 -1 -1
Sample Output
37
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #define MAX 105 #define INF 0x3f3f3f3f #define MOD 1000000007 using namespace std; typedef long long ll; int a[MAX][MAX]; int dp[MAX][MAX]; int t[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; int n; int dfs(int x,int y,int s){ int i,k; for(k=1;k<=s;k++){ for(i=0;i<4;i++){ int tx=x+t[i][0]*k; int ty=y+t[i][1]*k; if(tx<1||ty<1||tx>n||ty>n) continue; if(a[tx][ty]<=a[x][y]) continue; if(dp[tx][ty]>0) dp[x][y]=max(dp[x][y],dp[tx][ty]); else dp[x][y]=max(dp[x][y],dfs(tx,ty,s)); } } dp[x][y]+=a[x][y]; return dp[x][y]; } int main() { int k,i,j; while(scanf("%d%d",&n,&k)&&n+k>0){ for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ scanf("%d",&a[i][j]); } } memset(dp,0,sizeof(dp)); printf("%d\n",dfs(1,1,k)); } return 0; }
HDU - 1078 FatMouse and Cheese(记忆化+dfs)
标签:content mes contains block maximum sample mem -- math.h
原文地址:https://www.cnblogs.com/yzm10/p/9362292.html