题意:
看白书
要点:
其他的白书上讲的比较清楚了,状态转移方程为:d[i] = min(d[i], d[j] + (s[i] - s[j])*bulb[i].c + bulb[i].k),有点难以理解的是如果i到j之中有的不进行换比较合理怎么办?但其实这种情况是不存在的,这个博客进行了详细的数学推导:点击打开链接
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int d[1005], s[1005];
typedef struct node
{int v, k, c, l;
}node;
node bulb[1005];bool cmp(node a, node b)
{return a.v < b.v;
}int main()
{int n,i,j;while (scanf("%d", &n) && n){for (i = 1; i <= n; i++)scanf("%d%d%d%d", &bulb[i].v,&bulb[i].k,&bulb[i].c,&bulb[i].l);sort(bulb + 1, bulb + 1 + n, cmp);memset(d, inf, sizeof(d));memset(s, 0, sizeof(s))