存题(搜索)
1.
aoj 0033:https://onlinejudge.u-aizu.ac.jp/problems/0033
1 #include<bits/stdc++.h>//AOJ 0033 2 using namespace std; 3 int ball[11]; 4 bool flag; 5 void Dfs(int cnt,int left,int right) 6 { 7 if(flag) return; 8 if(cnt==10) 9 { 10 flag=true; 11 return; 12 } 13 14 if(ball[cnt]>left) 15 Dfs(cnt+1,ball[cnt],right); 16 if(ball[cnt]>right) 17 Dfs(cnt+1,left,ball[cnt]); 18 } 19 20 int main() 21 { 22 int t; 23 while(scanf("%d",&t)==1) 24 { 25 while(t--){ 26 flag=false; 27 for(int i=0;i<10;i++) 28 cin>>ball[i]; 29 Dfs(0,0,0); 30 if(flag) 31 cout<<"YES"<<endl; 32 else 33 cout<<"NO"<<endl; 34 } 35 } 36 return 0; 37 }
2.aoj 0525:https://onlinejudge.u-aizu.ac.jp/problems/0525
1 #include<bits/stdc++.h> aoj 0525 2 using namespace std; 3 int r,c; 4 int a[20][10010]; 5 int ans; 6 void dfs(int step) 7 { 8 if(step==r+1) 9 { 10 int sum=0; 11 int tmp=0; 12 for(register int j=1;j<=c;j++) 13 { 14 for(register int i=1;i<=r;i++) 15 { 16 if(a[i][j]==1) 17 { 18 tmp++; 19 } 20 } 21 sum+=max(tmp,r-tmp); 22 tmp=0; 23 } 24 ans=max(sum,ans); 25 return ; 26 } 27 dfs(step+1); 28 for(register int i=1;i<=c;i++) 29 a[step][i]=!a[step][i]; 30 dfs(step+1); 31 } 32 int main() 33 { 34 while(scanf("%d%d",&r,&c)!=EOF) 35 { 36 if(r==0&&c==0) 37 break; 38 memset(a,0,sizeof(a)); 39 ans=0; 40 for(register int i=1;i<=r;i++) 41 { 42 for(register int j=1;j<=c;j++) 43 { 44 cin>>a[i][j]; 45 } 46 } 47 dfs(1); 48 cout<<ans<<endl; 49 } 50 return 0; 51 }
3. poj 3187
http://poj.org/problem?id=3187
1 #include<iostream>//poj 3187 2 #include<cstdio> 3 #include<cmath> 4 #include<queue> 5 #include<vector> 6 #include<algorithm> 7 using namespace std; 8 int n,sum; 9 int a[20]; 10 int b[20]; 11 int main() 12 { 13 scanf("%d %d",&n,&sum); 14 for(register int i=1;i<=n;i++) 15 { 16 a[i]=i; 17 } 18 do{ 19 int tmp=n; 20 for(register int i=1;i<=n;i++) 21 { 22 b[i]=a[i]; 23 } 24 while(tmp!=1) 25 { 26 for(register int i=1;i<tmp;i++) 27 { 28 b[i]=b[i]+b[i+1]; 29 } 30 tmp--; 31 } 32 if(b[1]==sum) 33 break; 34 }while(next_permutation(a+1,a+1+n)); 35 for(register int i=1;i<=n;i++) 36 { 37 cout<<a[i]<<" "; 38 } 39 return 0; 40 }
4. poj 3009
1 #include<iostream>//poj 3009 2 #include<algorithm> 3 #include<cstdio> 4 #include<cmath> 5 using namespace std; 6 const int N=30; 7 const int INF=0x3f3f3f3f; 8 int h,w; 9 int dir[4][2]= 10 { 11 {-1,0}, 12 {0,-1}, 13 {1,0}, 14 {0,1}, 15 }; 16 int mp[N][N]; 17 int sx,sy; 18 int minn; 19 void dfs(int stx,int sty,int step) 20 { 21 step++; 22 if(step>10) 23 return ; 24 int dx,dy; 25 for(int i=0;i<4;i++) 26 { 27 dx=stx+dir[i][0]; 28 dy=sty+dir[i][1]; 29 if(mp[dx][dy]==1) 30 continue; 31 while(mp[dx][dy]==0||mp[dx][dy]==2) 32 { 33 dx=dx+dir[i][0]; 34 dy=dy+dir[i][1]; 35 } 36 if(mp[dx][dy]==-1) 37 continue; 38 if(mp[dx][dy]==1) 39 { 40 mp[dx][dy]=0; 41 dfs(dx-dir[i][0],dy-dir[i][1],step); 42 mp[dx][dy]=1; 43 } 44 if(mp[dx][dy]==3) 45 { 46 if(minn>step) 47 { 48 minn=step; 49 continue; 50 } 51 } 52 } 53 } 54 int main() 55 { 56 while(cin>>w>>h) 57 { 58 if(w==0&&h==0) 59 break; 60 minn=INF; 61 memset(mp,-1,sizeof(mp)); 62 for(int i=1;i<=h;i++) 63 { 64 for(int j=1;j<=w;j++) 65 { 66 cin>>mp[i][j]; 67 if(mp[i][j]==2) 68 { 69 sx=i; 70 sy=j; 71 } 72 } 73 } 74 dfs(sx,sy,0); 75 if(minn<INF) 76 { 77 cout<<minn<<endl; 78 } 79 else 80 cout<<-1<<endl; 81 } 82 return 0; 83 }
5. poj 3050:http://poj.org/problem?id=3050
1 #include<iostream>// poj 3050 2 #include<cstdio> 3 #include<cmath> 4 #include<queue> 5 #include<vector> 6 #include<algorithm> 7 #include<set> 8 using namespace std; 9 set<int>s; 10 int mp[10][10]; 11 const int n=5; 12 int dir[4][2]= 13 { 14 {-1,0}, 15 {0,-1}, 16 {1,0}, 17 {0,1}, 18 }; 19 bool check(int tx,int ty) 20 { 21 if(tx<=0||tx>n||ty<=0||ty>n) 22 { 23 return false; 24 } 25 return true; 26 } 27 void dfs(int x,int y,int sum,int step) 28 { 29 if(step==6) 30 { 31 s.insert(sum); 32 return ; 33 } 34 for(register int i=0;i<4;i++) 35 { 36 int newx=x+dir[i][0]; 37 int newy=y+dir[i][1]; 38 if(check(newx,newy)) 39 { 40 dfs(newx,newy,sum*10+mp[newx][newy],step+1); 41 } 42 } 43 } 44 int main() 45 { 46 for(register int i=1;i<=n;i++) 47 { 48 for(register int j=1;j<=n;j++) 49 { 50 scanf("%d",&mp[i][j]); 51 } 52 } 53 for(register int i=1;i<=n;i++) 54 { 55 for(register int j=1;j<=n;j++) 56 { 57 dfs(i,j,mp[i][j],1); 58 } 59 } 60 printf("%d\n",s.size()); 61 return 0; 62 }
本文来自博客园,作者:江上舟摇,转载请注明原文链接:https://www.cnblogs.com/LQS-blog/p/16450704.html