poj 2362
这题的目的是要学会剪枝。
说是用DFS,但是我不知道要怎么样DFS。。。郁闷了。还是看了别人的才恍然大悟。明天再好好看看!
#include <iostream>
#include <fstream>
#include <cstdio>
#include <memory.h>
#include <algorithm>
#define MAX 20
using namespace std;
int n,m,sum,side,flag;
int a[MAX],used[MAX];
void dfs(int len,int side_num,int start) //
{
int tem_len;
if(side_num==3) flag=1;
if(flag) return;
for(int i=start; i<m; i++)
{
if(used[i]==0)
{
tem_len=len+a[i];
if(tem_len<side)
{
used[i]=1;
dfs(tem_len,side_num,i);
used[i]=0;
}
else if(tem_len>side)
{
return;
}
else //add side_numbers
{
used[i]=1;
dfs(0,side_num+1,0);
used[i]=0;
}
}
}//for
}
int main()
{
freopen("acm.txt","r",stdin);
scanf("%d",&n);
for(int i=0; i<n; i++)
{
sum=0;
memset(a,0,sizeof(a));
memset(used,0,sizeof(used));
scanf("%d",&m);
for(int j=0; j<m; j++)
{
scanf("%d",&a[j]);
sum+=a[j];
}
sort(a,a+m);
side=sum/4;
if(sum%4!=0 || side<a[m-1] )
{
printf("no\n");
}
else{
flag=0;
dfs(0,0,0);
if(flag)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
}//for
return 0;
}
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法