题意
你的任务是设计一个照明系统。一共有n种灯泡可选,不同的灯泡需要不同的电源,而同一种灯泡可以共用一个电源。每种灯泡用4个值表示,所需电压V,电源价格K,灯泡单价C,所需个数L。为节省费用,可以用高电压灯泡代替低电压灯泡(如果能节省费用,且总灯泡数不能少)。求最少费用。
题解
题目的状态和动态转移方程不难写,但是有一个非常重要且有意思的预处理——按电压对所有灯泡排序。
做一个猜测,
排序的预处理往往可以简化算法设计。
AC代码
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1000+1;
const int INF = 0x3f3f3f3f;
struct qurt{
int v, k, c, l;
qurt(int v, int k, int c, int l):v(v),k(k),c(c),l(l){}
bool operator < (const qurt& rhs)const{
return v ve;
for(int i = 0; i=0; j--){
dp[i] = min(dp[i], dp[j]+(s[i]-s[j])*ve[i-1].c+ve[i-1].k);
}
}
printf("%d
", dp[n]);
}
return 0;
}