zoukankan      html  css  js  c++  java
  • 【UVA】11400 照明系统设计 排序+dp

    题目中有一个重要的信息是:每一种灯泡只能换成比它电压更大的灯泡,因此电压的大小限制了状态的转移。因此,在这里按照电压从小到大把每种灯泡排序,使得在考虑后面的灯泡时,前面的灯泡自然可以换成后面的灯泡。状态转移方程为(dp[i]=max(dp[j]+(s[i]-s[j])*c[i]+k[i]),jin[0,i-1]​),s[i] 表示前 i 种灯泡的数量。

    代码如下:

    #include <bits/stdc++.h>
    #define cls(a,b) memset(a,b,sizeof(a))
    using namespace std;
    const int maxn=1010;
    
    int n,dp[maxn],s[maxn];
    struct node{
    	int volt,src,cost,num;
    }l[maxn];
    
    bool cmp(const node& x,const node& y){
    	return x.volt<y.volt;
    }
    void init(){
    	cls(dp,0x3f);cls(l,0);cls(s,0);
    }
    
    int main(){
    	while(scanf("%d",&n)&&n){
    		init();
    		for(int i=1;i<=n;i++)
    			scanf("%d%d%d%d",&l[i].volt,&l[i].src,&l[i].cost,&l[i].num);	
    		
    		dp[0]=0;
    		sort(l+1,l+n+1,cmp);
    		
    		for(int i=1;i<=n;i++)
    			s[i]=s[i-1]+l[i].num;
    		
    		for(int i=1;i<=n;i++)
    			for(int j=0;j<i;j++)
    				dp[i]=min(dp[i],dp[j]+(s[i]-s[j])*l[i].cost+l[i].src);
    		
    		printf("%d
    ",dp[n]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    堆内存与栈内存
    struts2 ajax 实现方式
    Hibernate 配置派生属性
    高效 jquery 的奥秘
    对于Maven管理的项目制定虚拟目录
    ThreadLocal 笔记
    java Thread.join()
    vi 使用笔记
    浮动闭合方案:clearfix
    熬夜之弊及改善之法
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/9718411.html
Copyright © 2011-2022 走看看