感觉自己推得式子和代码的实现都没看出问题
但是连样例都过不去
求dalao看一眼,有没有哪里写错了
#include<bits/stdc++.h>
#define int long long
#define maxn 100010
#define maxm 100010
#define inf 0x7fffffff
using namespace std;
int x[maxn],sum[maxn],p[maxn],t[maxn];
int c[maxn];
int dp[maxn];
int q[maxn<<2];
int n;
double X(int p){
return sum[p]*1.0;
}
double Y(int p){
return 1.0*dp[p]+1.0*t[p];
}
double calc(int u,int v){
return X(u)!=X(v)?(double)1.0*(Y(v)-Y(u))/(double)1.0*(X(v)-X(u)):inf;
}
int ans=inf;
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>p[i]>>c[i];
sum[i]=sum[i-1]+p[i];
t[i]=t[i-1]+p[i]*x[i];
}
int head=1,tail=1;
for(int i=1;i<=n;i++)
{
while(head<tail&&calc(q[head],q[head+1])<=(double)1.0*x[i])
head++;
int j=q[head];
dp[i]=dp[j]+c[i]+x[i]*(sum[i]-sum[j])-t[i]+t[j];
while(head<tail&&calc(q[tail-1],q[tail])>=calc(q[tail],i))
tail--;
q[++tail]=i;
}
cout<<dp[n]<<"\n";
return 0;
}