1212LETTERS
http://ybt.ssoier.cn:8088/problem_show.php?pid=1212
#include<bits/stdc++.h> using namespace std; int maxs=0; bool a[25][25],b[10005]; char c[25][25]; int R,S; int x[4]={1,0,-1,0}; int y[4]={0,1,0,-1}; void dfs(int m,int n,int s){ if(s>maxs){ maxs=s; } for(int i=0; i<=3; i++){ int nx=x[i]+m; int ny=y[i]+n; if(nx<=R && ny<=S && nx>=1 && ny>=1){ if(b[c[nx][ny]]==false && a[nx][ny]==false){ b[c[nx][ny]]=true; a[nx][ny]=true; dfs(nx,ny,s+1); b[c[nx][ny]]=false; a[nx][ny]=false; } } } } int main(){ cin>>R>>S; for(int i=1; i<=R; i++){ for(int j=1; j<=S; j++){ cin>>c[i][j]; } } b[c[1][1]]=1; dfs(1,1,1); cout<<maxs<<endl; return 0; }
1258数字金字塔
http://ybt.ssoier.cn:8088/problem_show.php?pid=1258
递归+记忆化(满分法):
#include<bits/stdc++.h> using namespace std; int R; int a[1005][1005]; int s[1005][1005]; int f(int m,int n){ if(m==R){ return a[m][n]; }else { if(s[m][n]==0){ s[m][n]=max(f(m+1,n),f(m+1,n+1)); } return a[m][n]+s[m][n]; } } int main(){ cin>>R; for(int i=1; i<=R; i++){ for(int j=1; j<=i; j++){ cin>>a[i][j]; } } cout<<f(1,1)<<endl; return 0; }
http://ybt.ssoier.cn:8088/problem_show.php?pid=1215
#include<bits/stdc++.h> using namespace std; int k,h; char c[105][105]; bool ans=false; int x[4]={1,0,-1,0}; int y[4]={0,-1,0,1}; int ax,ay,bx,by,nx,ny; bool b[1005][1005]; void dfp(int x1,int y1){ if(ans){ return ; } for(int i=0; i<=3; i++){ nx=x[i]+x1; ny=y[i]+y1; if(c[nx][ny]=='.' && nx>=0 && nx<h && ny>=0 && ny<h && b[nx][ny]==false){ if(nx==bx && ny==by){ ans=true; } b[nx][ny]=true; dfp(nx,ny); b[nx][ny]=false; } } } int main(){ cin>>k; for(int i=0; i<k; i++){ cin>>h; for(int j=0; j<h; j++){ for(int z=0; z<h; z++){ cin>>c[j][z]; } } cin>>ax>>ay>>bx>>by; dfp(ax,ay); if(ans==false){ cout<<"NO"<<endl; }else cout<<"YES"<<endl; ans=false; memset(b,0,sizeof(b));//要记得清空!!! } return 0; }
1213八皇后问题 (未完成)
http://ybt.ssoier.cn:8088/problem_show.php?pid=1213
#include<bits/stdc++.h> using namespace std; int a[10][10],s=0; bool b[1000], c[1000],d[1000],e[1000]; void output(){ cout<<"NO. "<<s<<endl; for(int i=1; i<=8; i++){ for(int j=1; j<=8; j++){ cout<<a[i][j]<<" "; } cout<<endl; } } void dfs(int m){ for(int j=1; j<=8; j++){ if(b[j]==false && c[m+j]==false && d[m-j+7]==false){ a[m][j]=1; b[j]=true; c[m+j]=true; d[m-j+7]=true; if(m==8){ s++; output(); memset(a,0,sizeof(a)); }else { dfs(m+1); } b[j]=false; c[m+j]=false; d[m-j+7]=false; } } } int main(){ dfs(1); return 0; }
标签:false,cn,22,int,nx,ny,上午,1005 From: https://www.cnblogs.com/dxy09tj/p/17572846.html