【贪心结论】
【贪心结论】
排序
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;
}