Big Event in HDU
题目链接:Big Event in HDU —1171
这道题目直接用母函数做,大家如果不了解母函数的可以自己百度一下,由于题目比较简单,这里就直接贴代码哈.如果大家有什么问题,可以在下面回复,我会马上为你解答。
代码如下:
#include <iostream>
using namespace std;
int extra[100],Res[300000];
struct {
int V;
int M;
}res[50];
int main()
{
int N,sum;
while(scanf_s("%d",&N) &&N>0&&N<=50){
sum=0;
for(int i=0;i<N;i++){
cin>>res[i].V>>res[i].M;
sum+=res[i].V*res[i].M;
}
memset(Res,0,sizeof(Res));
for(int i=0;i<N;i++)
{
memset(extra,0,sizeof(extra));
for(int j=1;j<=res[i].M;j++)
extra[j]=res[i].V*j;
for(int k=0;k<=res[i].M;k++)
for(int x=0;x<=sum;x++)
Res[extra[k]+Res[x]]=extra[k]+Res[x];
}
int n,i,min=300000,flag;
for(i=0;i<=sum;i++){
if(Res[i]==0)
continue;
n=sum-Res[i];
n=Res[i]-n;
if(n>=0 && n<min){
min=n;
flag=i;
}
}
cout<<Res[flag]<<" "<<sum-Res[flag]<<endl;
}
return 0;
}
“`