标签:where most ase and block NPU 题意 mil maximum
D - FatMouse and Cheese
Input
There 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
题意:给一个图 从(0,0) 可以垂直或水平走 每次可以走小于等于k的任意距离 但每步的值 必须大于前一步的值 在无路可走时结束(周围k范围内无比该步大的值) 求可走完的最大值
思路:用dfs跑图 在dfs中设置cnt 用来记录上一个状态的最大值 将cnt+当前图里的值记录在二维dp数组中
#include<bits/stdc++.h> using namespace std; int n,k,maps[101][101],dp[101][101]; int dix[4]={0,1,0,-1};//x移动数组 int diy[4]={1,0,-1,0};//y移动数组 int dfs(int x,int y) { if(dp[x][y]) return dp[x][y];//当dp数组不为0 是证明 x,y走过了 int cnt=0;//用于记录之前值 for(int i=0;i<4;i++) { for(int j=1;j<=k;j++) { int dx=x+dix[i]*j; int dy=y+diy[i]*j; if(dx<0||dx>=n||dy<0||dy>=n)//判断越界的条件 break; if(maps[x][y]<maps[dx][dy]) cnt=max(cnt,dfs(dx,dy));//更新cnt } } return dp[x][y]=cnt+maps[x][y]; } int main() { while(1) { cin>>n>>k; memset(dp,0,sizeof(dp));//初始化 if(n==-1&&k==-1) break; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>maps[i][j]; } } cout<<dfs(0,0)<<endl; } return 0; }
D - FatMouse and Cheese <HDU 1078>
标签:where most ase and block NPU 题意 mil maximum
原文地址:https://www.cnblogs.com/xuxua/p/9278146.html