您的位置:首页
uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
2017-08-03 15:29
387 查看
本题难处好像是在于 能够把一些灯泡换成电压更高的灯泡以节省电源的钱 。所以也才有了对最优方案的探求
好的处理方法是依照电压从小到大排序。仅仅能让前面的换成后面的。也就满足了把一些灯泡换成电压更高的灯泡
的要求;
一种电压的灯泡,要么不换。要换则应该全换:换。说明用当前的电源不值;而既然不值则应该所有换掉以避免使用当前电源,不然即添加了灯泡费用又没节省电源费用,亏大了。。。
状态转移详见代码
好的处理方法是依照电压从小到大排序。仅仅能让前面的换成后面的。也就满足了把一些灯泡换成电压更高的灯泡
的要求;
一种电压的灯泡,要么不换。要换则应该全换:换。说明用当前的电源不值;而既然不值则应该所有换掉以避免使用当前电源,不然即添加了灯泡费用又没节省电源费用,亏大了。。。
状态转移详见代码
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 1010; struct lamp { int v,k,c,l; }a[maxn]; int n,v1,k1,c1,l1; int s[maxn]; int d[maxn]; bool cmp(lamp a1,lamp a2) { return a1.v<a2.v; } int main() { while(scanf("%d",&n)!=EOF) { if(n==0) break; memset(s,0,sizeof(s)); memset(d,0,sizeof(d)); memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) { scanf("%d%d%d%d",&v1,&k1,&c1,&l1); a[i].v=v1; a[i].k=k1; a[i].c=c1; a[i].l=l1; } sort(a+1,a+n+1,cmp); s[0]=0; for(int i=1;i<=n;i++) { s[i]=s[i-1]+a[i].l; } d[0]=0; for(int i=1;i<=n;i++) { for(int j=0;j<i;j++) { if(j==-0) d[i]=(s[i])*a[i].c+a[i].k; else d[i]=min(d[j]+(s[i]-s[j])*a[i].c+a[i].k,d[i]); } } printf("%d\n",d ); } return 0; }
相关文章推荐
- uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
- 【线性结构上的动态规划】UVa 11400 - Lighting System Design
- 动态规划经典问题 最长上升子序列poj2533
- 动态规划----最长上升子序列问题
- Leetcod-300_最长上升子序列LIS-基础动态规划问题-【C++】
- 算法基础之python实现动态规划中数字三角形和最长上升子序列问题
- 解题报告 之 UVA11400 Lighting System Design
- 动态规划之最长上升自序列问题
- 动态规划 01 (最长上升子序列)
- Lighting System Design UVA - 11400 (线性dp)
- UVa - 11400 - Lighting System Design
- uva 11400 Lighting System Design dp
- 动态规划:最长上升子序列
- 动态规划(最长上升子序列)
- 简单动态规划之最长上升子序列
- c++动态规划基础——最长上升子序列
- UVa 11400- Lighting SystemDesign(DP)
- 动态规划之编号动态规划:hdu 1025(dp+二分 求最长上升子序列)
- 动态规划 最长公共子序列 最长上升子序列 最长上升公共子序列
- 动态规划-最长上升子序列