首页 > 代码库 > wikioi 1043 双向dfs
wikioi 1043 双向dfs
思路:这题棋盘DP或者搜索,或者暴力都可以,因为棋盘比较小。
这里用的双向dfs。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<queue> #include<set> #include<cmath> #include<bitset> #define mem(a,b) memset(a,b,sizeof(a)) #define lson i<<1,l,mid #define rson i<<1|1,mid+1,r #define llson j<<1,l,mid #define rrson j<<1|1,mid+1,r #define INF 0x7fffffff typedef long long ll; typedef unsigned long long ull; using namespace std; int n,a[10][11],Max; void dfs2(int i,int j,int sum) { if(i==1&&j==1) Max=max(Max,sum); else { if(i>1&&a[i-1][j]!=-1) dfs2(i-1,j,sum+a[i][j]); if(j>1&&a[i][j-1]!=-1) dfs2(i,j-1,sum+a[i][j]); } } void dfs1(int i,int j,int sum) { if(i==n&&j==n) a[1][1]=0,dfs2(n,n,sum); else { int cnt=a[i][j];a[i][j]=-1; if(i<n) dfs1(i+1,j,sum+cnt); if(j<n) dfs1(i,j+1,sum+cnt); a[i][j]=cnt; } } int main() { int u,v,w; scanf("%d",&n); while(~scanf("%d%d%d",&u,&v,&w)) { if(u==0&&v==0&&w==0) break; a[u][v]=w; } dfs1(1,1,0); cout<<Max<<endl; return 0; }
wikioi 1043 双向dfs
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。