【贪心结论】

【贪心结论】

排序

Stacking of Goods

https://codeforces.com/gym/105358/problem/J

【结论】交叉相乘

计算

\[c_1 \times 0 + c_2 \times w_1 + c_3 \times (w_1+w_2) + c_4 \times (w_1+w_2+w_3) + ... + c_n \times (w_1+w_2+...+w_{n-1}) \]

最小值
->排序方式:a.w * b.c > b.w * a.c

代码

const int N=1e5+10;
int n;
struct node{
    i64 w,v,c;
}g[N];
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>g[i].w>>g[i].v>>g[i].c;
    sort(g+1,g+n+1,[&](node a,node b)->bool{
    	return a.w*b.c>a.c*b.w;
    });
    vector<i64> res(n+2,0);
    for(int i=1;i<=n;i++){
        res[i]=res[i-1]+g[i].w;
    }
    i64 ans1=0;
    for(int i=1;i<=n;i++){
        ans1+=g[i].v;
    }
    i64 ans2=0;
    for(int i=2;i<=n;i++){
        ans2+=res[i-1]*g[i].c;
    }
    i64 ans=ans1-ans2;
    cout<<ans<<endl;
}
posted @ 2025-09-05 15:40  White_ink  阅读(6)  评论(0)    收藏  举报