现有nx个x,ny个y,nz个z,nw个w,将这若干个非负整数分别置于A数组中或B数组中。规则是:所有x必须放入A数组,所有y必须放入B数组,z和w可以放入A数组也可以放入B数组。SA为A数组的和,SB为B数组的和,S为SA和SB的较大者。当x,y,z,w和nx,ny,nz,nw确定后,如何放置,可以使得S最小,并求出这个S值。其中 0<=x,y,z,w<=10000000,nx,ny,nz,nw<=10000000。
如:x,y,z,w,nx,ny,nz,nw分别为:10 1 10 10 100 1 3 5。S为1000。
直接上代码:
using namespace std;
#include<iostream>
#define MAX 10000000
int main()
{
int x,y,z,w,nx,ny,nz,nw;
cout<<"Please Enter Data:"<<endl;
cout<<"x:";
cin>>x;
cout<<"y:";
cin>>y;
cout<<"z:";
cin>>z;
cout<<"w:";
cin>>w;
cout<<"nx:";
cin>>nx;
cout<<"ny:";
cin>>ny;
cout<<"nz:";
cin>>nz;
cout<<"nw:";
cin>>nw;
int *A=new int[MAX];
int *B=new int[MAX];
int i,sumA=0,sumB=0,S;
for(i=0;i<nx;i++)
{
A[i]=x;sumA+=x;
}
for(i=0;i<ny;i++)
{
B[i]=y;sumB+=y;
}
int j=nx,k=ny;
for(i=0;i<nz;i++)
{
if(sumA+z>sumB)
{
B[k++]=z;
sumB+=z;
}
else
{
A[j++]=z;
sumA+=z;
}
}
for(i=0;i<nw;i++)
{
if(sumA+w>sumB)
{
B[k++]=w;
sumB+=w;
}
else
{
A[j++]=w;
sumA+=w;
}
}
sumA>sumB?S=sumA:S=sumB;
cout<<S<<endl;
delete[]A;
delete[]B;
return 0;
}
小结:
对w的操作和对z的操作基本类似,可以考虑合并在一步进行操作。