求N对石子可以合并出的所有质量
#include
<
string
>
#include < iostream >
#include < fstream >
using namespace std;
ifstream in ( " in.txt " );
ofstream out ( " out.txt " );
int i_count;
#define max 1000 // 最多堆数
int i,j,sum;
int num[max - 1 ];
bool f[max - 1 ]; // f[i]表示i重可否取到
void work1(); // 求出合并所有可能得到的重量
int main()
{
sum=0;
in >> i_count;
for (i=0;i<i_count;i++)
{
in >> num[i];
sum+=num[i];
}//end for
work1();
system ("pause");
}
void work1()
{
f[0]=true;
for(j=0;j<i_count;j++)
{
for(i=sum-num[j];i>=0;--i)
{
f[i+num[j]]=true;
}//end for i
}//end for j
for (i=0;i<=sum;++i)
{
if (f[i]==true) out << i<< endl;
}//end for
return;
}
#include < iostream >
#include < fstream >
using namespace std;
ifstream in ( " in.txt " );
ofstream out ( " out.txt " );
int i_count;
#define max 1000 // 最多堆数
int i,j,sum;
int num[max - 1 ];
bool f[max - 1 ]; // f[i]表示i重可否取到
void work1(); // 求出合并所有可能得到的重量
int main()
{
sum=0;
in >> i_count;
for (i=0;i<i_count;i++)
{
in >> num[i];
sum+=num[i];
}//end for
work1();
system ("pause");
}
void work1()
{
f[0]=true;
for(j=0;j<i_count;j++)
{
for(i=sum-num[j];i>=0;--i)
{
f[i+num[j]]=true;
}//end for i
}//end for j
for (i=0;i<=sum;++i)
{
if (f[i]==true) out << i<< endl;
}//end for
return;
}