Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
119159 陈家宝 仓库建设 C++ 通过 100 487 MS 39324 KB 1100 2024-01-04 13:32:55

Tests(10/10):


#include<bits/stdc++.h> using namespace std; #define why 1000005 #define ll long long struct fac { ll dis,num,w; } a[why]; ll n,f[why],sum[why]; inline ll Read() { long long r=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-f; ch=getchar(); } while(isdigit(ch)){ r=(r<<3)+(r<<1)+ch-'0'; ch=getchar(); } return r*f; } inline bool cmp(fac a,fac b) { return a.dis<b.dis; } inline ll need(ll x,ll y) { ll r=0; for(long long i=x; i<=y-1; ++i) r+=(a[y].dis-a[i].dis)*a[i].num; return r; } int main() { long long just=0,u; n=Read(); for(long long i=1; i<=n; ++i){ a[i].dis=Read(); a[i].num=Read(); a[i].w=Read(); sum[i]=sum[i-1]+a[i].num; } sort(a+1,a+1+n,cmp); f[0]=0; f[1]=a[1].w; for(ll i=2; i<=n; ++i){ f[i]=f[i-1]-a[i-1].w+a[i].w+(sum[i-1]-sum[just])*(a[i].dis-a[i-1].dis); for(ll j=just+1; j<i; ++j){ if(a[i].w+f[j]>f[i])continue; u=a[i].w+f[j]+need(j+1,i); if(u<f[i])f[i]=u,just=j; } } printf("%lld",f[n]); return 0; }


测评信息: