问题标题: 各位大神,酷町堂题目1175 糖果奖励(sugar)怎么做?

1
1

1
已采纳
张瑀涵
张瑀涵
高级光能
高级光能


首先定义一个结构体sugar,包含sweet(甜度)和v(体积)

接着进行排序:

int comp(sugar a,sugar b)
{
    if(a.sweet!=b.sweet)
        return a.sweet>b.sweet;
    return a.v>b.v;
}
void qsort(sugar a[],int l,int r)
{
    int i=l,j=r;
    sugar mid=a[(l+r)/2];
    while(i<=j)
    {
        while(comp(a[i],mid))   i++;
        while(comp(mid,a[j]))   j--;
        if(i<=j)
        {
            swap(a[i],a[j]);
            i++;
            j--;
        }
    }
    if(l<j)
        qsort(a,l,j);
    if(i<r)
        qsort(a,i,r);
}

我们只需要排sweet,在sweet相同的情况下再选择体积较大的。

排序后,在分别对sweet和v进行累加,最后输出即可。
 

0
谢其桦
谢其桦
资深守护
资深守护

 

while (a[i]>mid) or (a[i]=mid) and (b[i]>mid1) do inc(i);

while (a[j]<mid) or (a[j]=mid) and (b[j]<mid1) do dec(j);

if i<=j then

begin

t:=a[i];

a[i]:=a[j];

a[j]:=t;

t:=b[i];

b[i]:=b[j];

b[j]:=t;

inc(i);

dec(j);

end;

until i>j;

if l<j then qsort(l,j);

if i<r then qsort(i,r);

end;

0
叶卓舒
叶卓舒
初级守护
初级守护

这题是贪心算法。

先把甜度按从大到小排序,如果甜度相同则体积大的排在前面。

排完序后把前k个甜度相加,再把前k个体积相加,最后输出前k个甜度相加的和以及前k个体积相加的和就行了。

0
我要回答