POJ 1014 Dividing DFS搜索

来源:互联网 发布:淘宝实体店叫什么 编辑:程序博客网 时间:2024/06/06 10:59

题目大意:给定价值为1,2,,3,4,5,,6的物品的数量,问是否能划分成完全相等的两部分。

题目分析:题目的数据不大:所以我们可以直接DFS过掉

代码如下:

#include<cstdio>#include<iostream>using namespace std;int n[7];int SumValue;int HalfValue;bool flag;void Dfs(int value,int pre){if(flag)return;if(value==HalfValue){flag=true;return;}for(int i=pre;i>=1;i--){if(n[i]){if(value+i<=HalfValue){n[i]--;Dfs(value+i,i);if(flag)break;}}}return ;}int main(){int test=1;while(cin>>n[1]>>n[2]>>n[3]>>n[4]>>n[5]>>n[6]){SumValue=0;for(int i=1;i<=6;i++)SumValue+=i*n[i];if(SumValue==0)break;if(SumValue%2!=0){cout<<"Collection #"<<test++<<':'<<endl;cout<<"Can't be divided."<<endl<<endl;    //注意有空行continue;}HalfValue=SumValue/2;flag=false;Dfs(0,6);if(flag){cout<<"Collection #"<<test++<<':'<<endl;cout<<"Can be divided."<<endl<<endl;continue;}else{cout<<"Collection #"<<test++<<':'<<endl;cout<<"Can't be divided."<<endl<<endl;continue;}}//while(1);return 0;}

0 0
原创粉丝点击