uva 11400 DP 需要推理

来源:互联网 发布:东京八分钟知乎 编辑:程序博客网 时间:2024/05/16 09:50
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{int v,k,c,l;}a[10100];long long dp[10100],sum[10100];bool cmp(const node &a,const node &b){return a.v<b.v;}int main(){int n;while( scanf("%d" ,&n) == 1 && n){for(int i=1;i<=n;i++){scanf("%d%d%d%d",&a[i].v,&a[i].k,&a[i].c,&a[i].l);}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i].l;for(int i=1;i<=n;i++){dp[i]=a[i].k + a[i].c * sum[i];for(int j=1;j<i;j++){dp[i]=min(dp[i] , dp[j] + (sum[i] - sum[j]) * a[i].c + a[i].k);}}printf("%lld\n",dp[n]);}}