/*
思路:用preValF[]记录各个人对礼品1的兴趣值,用preValS[]记录各个人对礼品2的兴趣值,
用dec[][1]记录preValF[]-preValS[]的差值,用decN记录dec[][1]中大于0的个数
用dec[][0]记录位置0,1,2,3......。当我们队dec[][1]进行从大到小排序时,dec[][0]的序号也一起跟着dec[][1]
变化。
礼品1个数记为N1,礼品2个数记为N2,人数记为N
当decN>=N1时,我们从礼品1中拿出N1件,给谁呢,给已经按从大到小排好的dec[][1]对应的dec[][0]的前N1个坐标对应的值
比如,N1=3,现在dec[][0]中从前到后选N1个,即选出dec[0][0]、dec[1][0]、dec[2][0],其值就是要将礼物1送给的对象。
当decN<N1,则将礼品1送给dec[][0]前decN为对应的对象,礼品2则送给剩下的对象
*/
#include <stdio.h>
int main()
{
int n=0;
int num[1000][2];
int present[2][3];
scanf("%d",&n);
int i1=0;
//输入朋友喜爱特性
for(i1=0;i1<n;i1++)
{
scanf("%d %d",&num[i1][0],&num[i1][1]);
}
int i2=0;
//输入礼品特性
for(i2=0;i2<2;i2++)
{
scanf("%d %d %d",&present[i2][0],&present[i2][1],&present[i2][2]);
}
//各个朋友对礼品1的兴趣值
int preValF[1000];
int i3=0;
for(i3=0;i3<n;i3++)
{
preValF[i3]=num[i3][0]*present[0][1]+num[i3][1]*present[0][2];
}
//各个朋友对礼品2的兴趣值
int preValS[1000];
int i4=0;
for(i4=0;i4<n;i4++)
{
preValS[i4]=num[i4][0]*present[1][1]+num[i4][1]*present[1][2];
}
//记录preValF-preValS的差dec,并记录差值正整数个数decN
int dec[1000][2]={0};
int i5=0;
int decN=0;
for(i5=0;i5<n;i5++)
{
dec[i5][0]=i5;
dec[i5][1]=preValF[i5]-preValS[i5];
if(dec[i5][1]>=0)
decN++;
}
//采用冒泡排序对dec
int j1=0;
int i6=0;
int temp1=0;
int temp2=0;
for(j1=0;j1<n;j1++)
{
for(i6=1;i6< n-j1;i6++)
{
if( dec[i6-1][1]<dec[i6][1] )
{
//dec[][0]代表是排在第几位,dec[][1]代表差值的值,我们让dec[][1]从大到小排序,dec[][0]和dec[][1]一起移动,
//当dec[][1]按大到小排好后,dec[][0]则标记了其是第几个差值
temp1=dec[i6-1][0];
dec[i6-1][0]=dec[i6][0];
dec[i6][0]=temp1;
temp2=dec[i6-1][1];
dec[i6-1][1]=dec[i6][1];
dec[i6][1]=temp2;
}
}
}
//格局人数n、礼品1个数present[0][0],礼品2个数present[1][0],礼品1的值-礼品2的值整数的个数decN
//来确定礼品1应该选哪几个
int sum=0;
if(decN>=present[0][0])//则礼品1中拿出来present[0][0]个,即全部拿出来
{
int i7=0;
for(i7=0;i7<n;i7++)
{
int sig1=0;
int j2=0;
for(j2=0;j2<present[0][0];j2++)
{
if(i7==dec[j2][0])
sig1=1;
}
if(sig1==1)
sum=sum+preValF[i7];
else
sum=sum+preValS[i7];
}
}
//如果decN<present[0][0],则从礼品1中取出decN个
if(decN<present[0][0])
{
int i8=0;
for(i8=0;i8<n;i8++)
{
int sig2=0;
int j3=0;
for(j3=0;j3<decN;j3++)
{
if(i8==dec[j3][0])
sig2=1;
}
if(sig2==1)
sum=sum+preValF[i8];
else
sum=sum+preValS[i8];
}
}
printf("%d\n",sum);
return 0;
}
百度之星--第二场--T3度度熊的礼物
最新推荐文章于 2023-03-29 18:43:37 发布