其他分享
首页 > 其他分享> > 存题(搜索)

存题(搜索)

作者:互联网

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 }

 

标签:cnt,ball,20,int,flag,存题,搜索,include
来源: https://www.cnblogs.com/LQS-blog/p/16450704.html