1
已解决
请问1175 糖果奖励(sugar)怎么做?谢谢!
1
已采纳
贪心+结构体排序
伪代码如下
#include<iostream>
using namespace std;
void qsort(int,int);
struct sugar
{
int td;
int tj;
}x[1000100];
bool compare(sugar a,sugar b)
{
比较函数
}
void qsort(int l,int r)
{
快排
}
(加在一起为结构体排序)
int main()
{
long long i,n,max1=0,max2=0,k;
cin>>n>>k;
for(i=0;i<n;i++)
{
cin>>x[i].td;
}
for(i=0;i<n;i++)
{
cin>>x[i].tj;
}
qsort(0,n-1);
for(i=0;i<k;i++)
{
相加
}
输出
return 0;
}
0
0
这题是贪心算法(贪心算法学过吧😑),贪心策略:甜度从大到小排序,如果相同则体积大的排在前面。
排序如下:
procedure qsort(l,r:longint);
var
i,j,t,mid,mid1:longint;
begin
i:=l;
j:=r;
mid:=a[(l+r) div 2];
mid1:=b[(l+r) div 2];
repeat
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;
排序完后把前k个甜度相加,再把前k个体积相加,最后输出就行了。
0
procedure qsort(l,r:longint);
var
i,j,t,mid,mid1:longint;
begin
i:=l;
j:=r;
mid:=a[(l+r) div 2];
mid1:=b[(l+r) div 2];
repeat
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
