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