再次理解dfs,poj1014

来源:互联网 发布:多媒体课件制作软件 编辑:程序博客网 时间:2024/06/08 14:02
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;


int a[7] = {0};
int flag = 0;
int half = 0;


void dfs( int value, int cus)
{
    if (value == half){
        flag = 1;
        return;
    }


    if (flag)
        return;


    int i ;
    for (i = cus; i > 0; i--){


        if (a[i]){


            if(value + i <= half)
            {
                a[i]--;
                dfs(value+i, i);


                if (flag)
                    return ;
            }
        }
    }




}


int main()
{
    int i, sum = 0, k = 0;
    while (1){
            k++; sum = 0; flag = 0;


        for (i = 1; i <= 6; i++){


             cin>>a[i];
             sum += a[i]*i;
        }
        half = sum/2;


        if (sum == 0)
            break;


        if (sum%2!=0)
            cout<<"Collection #"<<k<<":"<<endl<<"Can't be divided."<<endl<<endl;


        else
        {
            dfs(0,6);
            if (flag)
                 cout<<"Collection #"<<k<<":"<<endl<<"Can be divided."<<endl<<endl;


            else
                cout<<"Collection #"<<k<<":"<<endl<<"Can't be divided."<<endl<<endl;
        }


    }


    return 0;
}
0 0
原创粉丝点击