uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
生活随笔
收集整理的這篇文章主要介紹了
uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本題難處好像是在于 能夠把一些燈泡換成電壓更高的燈泡以節省電源的錢 。所以也才有了對最優方案的探求
好的處理方法是依照電壓從小到大排序。僅僅能讓前面的換成后面的。也就滿足了把一些燈泡換成電壓更高的燈泡 的要求;
一種電壓的燈泡,要么不換。要換則應該全換:換。說明用當前的電源不值;而既然不值則應該所有換掉以避免使用當前電源,不然即添加了燈泡費用又沒節省電源費用,虧大了。。。
狀態轉移詳見代碼
#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;elsed[i]=min(d[j]+(s[i]-s[j])*a[i].c+a[i].k,d[i]);}}printf("%d\n",d[n]);}return 0; }總結
以上是生活随笔為你收集整理的uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【RegExp】JavaScript中正
- 下一篇: python-学习 协程函数 模块与包