http://oj.ecustacm.cn/problem.php?id=1352
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int b[20];
int ans=0;
void dfs(int index)
{
if(index==17)
{
int sum1,sum2,sum3;
sum1=sum2=sum3=1;
int sum4,sum5,sum6;
sum4=sum5=sum6=0;
for(int i=2;i<=16;i++)
{
if(b[i]==1)
{
sum1+=i;
sum2+=pow(i,2);
sum3+=pow(i,3);
}
if(b[i]==2)
{
sum4+=i;
sum5+=pow(i,2);
sum6+=pow(i,3);
}
}
if(sum1==sum4&&sum2==sum5&&sum3==sum6)
{
cout<<1<<" ";
for(int i=2;i<=16;i++)
{
if(b[i]==1)
{
cout<<i<<" ";
}
}
cout<<endl;
}
return;
}
b[index]=1;//选
dfs(index+1);
b[index]=2;//不选
dfs(index+1);
}
int main(void)
{
dfs(2);
return 0;
}
#include<cstdio>
#include<iostream>
using namespace std;
bool vis[20];
int ans;
void dfs(int index)
{
if(index==8)
{
int sum1,sum2,sum3,sum4,sum5,sum6;
sum1=sum2=sum3=sum4=sum5=sum6=0;
for(int i=1;i<=16;i++)
{
if(vis[i])sum1+=i,sum3+=i*i,sum5+=i*i*i;
else sum2+=i,sum4+=i*i,sum6+=i*i*i;
}
if(sum1==sum2&&sum3==sum4&&sum5==sum6)
{
for(int i=1;i<=16;i++) if(vis[i]) cout<<i<<" ";
cout<<endl;
}
return ;
}
for(int i=2;i<=16;i++)
{
if(!vis[i])
{
vis[i]=true;
dfs(index+1);
vis[i]=false;
}
}
}
int main(void)
{
vis[1]=true;
dfs(1);
cout<<ans<<endl;
return 0;
}