这题本质上是贪心算法。
我们可以让 总售价和总库存做比值设为 k 这样我们就可以对其从大到小排序
假设我们总共要取n次月饼 还要保证总销售有最大值,我们可以这样做
我们先从最小的吨数r 拿起 ,还要保证r*k 还是比较大的 假设 还剩下月饼 继续枚举即可
#includeusing namespace std; const int N=1010; int n; double rr,d=0; int a[N]; int b[N]; struct node{ double a,b; bool operator<(const node &t)const { return b/a>t.b/t.a; } }c[N]; int main() { cin>>n>>d; for(int i=0;i >c[i].a; for(int i=0;i >c[i].b; sort(c,c+n); for(int i=0;i 0;i++) { double r=min(d,c[i].a); d-=r; rr+=(c[i].b/c[i].a)*r; } printf("%.2lf",rr); }



