dfs,,类似树的想法
来源:互联网 发布:库里生涯场均数据 编辑:程序博客网 时间:2024/04/28 08:03
P - FatMouse and Cheese
HDU - 1078看了是dfs。但是自己写的时候没有按照那个写。。
而且题目还没看好。他是只能水平或垂直,不能再转向了。。
别人ac代码:
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int n,k,dp[105][105],a[105][105];int to[4][2] = {1,0,-1,0,0,1,0,-1};int check(int x,int y){ if(x<1 || y<1 || x>n || y>n) return 1; return 0;}int dfs(int x,int y){ int i,j,l,ans = 0; if(!dp[x][y]) { for(i = 1; i<=k; i++) { for(j = 0; j<4; j++) { int xx = x+to[j][0]*i; int yy = y+to[j][1]*i; if(check(xx,yy)) continue; if(a[xx][yy]>a[x][y]) ans = max(ans,dfs(xx,yy)); } } dp[x][y] = ans+a[x][y]; } return dp[x][y];}int main(){ int i,j; while(~scanf("%d%d",&n,&k),n>0&&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));//他的dp[i][j]表示从(ii,j)走得到的maxx,算是一种逆向思维吧,而且因为dfs(1,1)是确定的。这更像是一种树的结构。 } return 0;}自己的TLE代码。 没有什么参考价值吧。
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<string>#include<cstring>#include<iomanip>#include<iostream>#include<stack>#include<cmath>#include<map>#include<vector>#define ll long long#define inf 0x3f3f3f3f#define bug1 cout<<"bug1"<<endl;#define bug2 cout<<"bug2"<<endl;#define bug3 cout<<"bug3"<<endl;using namespace std;const int maxn=105;int a[maxn][maxn];int dp[maxn][maxn];int n,k;void dfs(int x,int y){//对于每一个点都找出它的上一个。 int tmpu=max(0,x-k),tmpd=min(n,x+k+1); for(int i=tmpu;i<tmpd;++i){ int tmpl=max(y-k,0),tmpr=min(n,y+k+1); for(int j=tmpl;j<tmpr;++j){ if(abs(x-i)+abs(y-j)<=k){ if(dp[i][j]<dp[x][y]+a[i][j]&&a[i][j]>a[x][y]){ dp[i][j]=dp[x][y]+a[i][j]; dfs(i,j); } /* if(dp[i][j]+a[x][y]>dp[x][y]&&a[i][j]<a[x][y]){ dfs(i,j); dp[x][y]=dp[i][j]+a[x][y]; } */ /* 反正由前一个状态到这个状态是不可以的 if(dp[i][j]+a[x][y]>dp[x][y]){ dp[x][y]=dp[i][j]+a[x][y]; } */ /* if(dp[i][j]<dp[x][y]+a[i][j]&&a[i][j]>a[x][y]){ dp[i][j]=dp[x][y]+a[i][j]; }*///有当前推后面也不可以 } } }}void init(){ memset(dp,0,sizeof(dp));}int main(){ while(~scanf("%d%d",&n,&k)&&n!=-1&&k!=-1){ init(); for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ scanf("%d",&a[i][j]); } } /* for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ cout<<a[i][j]<<' '; } cout<<'\n'; }*/ dp[0][0]=a[0][0]; for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ dfs(i,j); } } for(int i=n-1;i>=0;--i){ for(int j=n-1;j>=0;--j){ dfs(i,j); } } /* for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ dfs(i,j); } } for(int i=n-1;i>=0;--i){ for(int j=n-1;j>=0;--j){ dfs(i,j); } }*/ int maxx=0; for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ maxx=max(maxx,dp[i][j]); } } /* for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ cout<<dp[i][j]<<' '; } cout<<'\n'; }*/ cout<<maxx<<'\n'; }}
0 0
- dfs,,类似树的想法
- HDU1045 类似8皇后的dfs
- Codeforces 763A dfs+想法
- Codeforces230C--Shifts--想法题--类似palindrome
- SSL2787 2017年10月24日提高组 一个不成熟的想法(dfs)
- POJ 1753 Flip Game(类似与N皇后问题的DFS)
- hdu2369 Broken Keyboard(类似dfs)
- poj3140 树的dfs
- POJ3140 - 树的DFS
- 树的DFS序
- 树的dfs序
- 转一个跟我想法有点类似的LBS创业公司“面包圈”让位于该地点的人实时回答你的问题
- 一个愚蠢的想法
- 玩萨尔达的一点想法
- 即时通讯系统的想法
- 个人主页的一些想法
- 关于成功的想法
- 程序维护的想法
- pentaho-server-ce-7.0安装配置说明
- [编程题] 数列还原
- Eclipse 和 IDEA快捷键对比大全
- Filesystom函数——fread和fwrite详细整理
- PHP算法之排序算法
- dfs,,类似树的想法
- jeesite快速开发平台(七)---硕正WEB组件的应用
- Java线程中yield与join方法的区别
- Sum of Left Leaves
- 谈谈MVC模式
- 颜色校准总结
- Vue学习之路---No.3(分享心得,欢迎批评指正)
- git 在github上托管代码
- mmb小结