uva11400
Posted pandaking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva11400相关的知识,希望对你有一定的参考价值。
给出题目意思:设计一个照明系统,有n(n<=1000)种灯泡可供选择,不同种类的灯泡必须用不同的电源,同种灯泡用一个电源,每种灯泡用4个数值表示:电压值v(v<=132000),电源费用k(k<=1000),每个灯泡的费用c(c<=10)和所需灯泡的数量l(1<=l<=100)
为了省钱,可以把一些灯泡换成电压更高的另一种灯泡来节省电源的钱(但不能换成电压更低的灯泡)。你的任务是设计出最优方案的费用
首先可以明确一点是灯泡要么全换要么一个都不换,这种很好像,如果当前灯泡的费用小于电压高的灯泡,那么最好就是全换掉在把电源也省掉!如果大于的话那么就是全换了,看电源的钱能不能省出来,要么就是一点都不换
这样的话就满足了dp的最优子结构的条件,而且也很好找出状态,我觉得很最长上升子序列挺相似的
接下来是代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=1100; 7 int n,s1[maxn]; 8 int dp[maxn]; 9 struct node{ 10 int v,k,c,l;//灯泡电压 电源费用 每个灯泡的费用 灯泡数量 11 }; 12 node li[maxn]; 13 14 bool cmp(node a1,node b1){ 15 return a1.v<b1.v; 16 } 17 18 int main(){ 19 while(scanf("%d",&n)!=EOF){ 20 if(n==0) break; 21 for(int i=1;i<=n;i++) scanf("%d%d%d%d",&li[i].v,&li[i].k,&li[i].c,&li[i].l); 22 sort(li+1,li+n+1,cmp); 23 s1[0]=0; 24 for(int i=1;i<=n;i++) s1[i]=s1[i-1]+li[i].l;//得到灯泡的数量 25 dp[1]=0; 26 for(int i=1;i<=n;i++){ 27 dp[i]=s1[i]*li[i].c+li[i].k; 28 for(int j=1;j<i;j++){ 29 dp[i]=min(dp[i],dp[j]+(s1[i]-s1[j])*li[i].c+li[i].k); 30 } 31 } 32 cout<<dp[n]<<endl; 33 } 34 return 0; 35 }
下面是我的一个错误代码,错误原因未注意边界条件设置
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=1100; 7 int n,s1[maxn]; 8 int dp[maxn]; 9 struct node{ 10 int v,k,c,l;//灯泡电压 电源费用 每个灯泡的费用 灯泡数量 11 }; 12 node li[maxn]; 13 14 bool cmp(node a1,node b1){ 15 return a1.v<b1.v; 16 } 17 18 int main(){ 19 while(scanf("%d",&n)!=EOF){ 20 if(n==0) break; 21 for(int i=1;i<=n;i++) scanf("%d%d%d%d",&li[i].v,&li[i].k,&li[i].c,&li[i].l); 22 sort(li+1,li+n+1,cmp); 23 s1[0]=0; 24 for(int i=1;i<=n;i++) s1[i]=s1[i-1]+li[i].l; 25 dp[1]=li[1].k+li[1].c*li[1].l; 26 for(int i=2;i<=n;i++){ 27 dp[i]=dp[1]+(s1[i]-s1[1])*li[i].c+li[i].k; 28 for(int j=2;j<i;j++){ 29 dp[i]=min(dp[i],dp[j]+(s1[i]-s1[j])*li[i].c+li[i].k); 30 } 31 } 32 cout<<dp[n]<<endl; 33 } 34 return 0; 35 }
我觉得为什么会出现问题 ,原因是第一个没有漏解,而第二个漏解了!
以上是关于uva11400的主要内容,如果未能解决你的问题,请参考以下文章
UVA11400 Lighting System Design