zoukankan      html  css  js  c++  java
  • luogu 2577 [ZJOI2005]午餐 贪心+dp

    发现让 $b$ 更大的越靠前越优,然后依次决策将每个人分给哪个窗口. 

    令 $f[i][j]$ 表示考虑了前 $i$ 个人,且第一个窗口的总等待时间为 $j$ 的最小总时间. 

    然后转移一下就好了~

    #include <bits/stdc++.h>
    #define N 201 
    #define setIO(s) freopen(s".in","r",stdin) 
    using namespace std;  
    struct P 
    {
        int a,b; 
        P(int a=0,int b=0):a(a),b(b){} 
    }s[N];    
    int f[N][N*N],sum[N];      
    bool cmp(P a,P b) 
    {
        return a.b>b.b;   
    }
    int main() 
    { 
        // setIO("input"); 
        int n,i,j,k; 
        scanf("%d",&n); 
        for(i=1;i<=n;++i) scanf("%d%d",&s[i].a,&s[i].b); 
        sort(s+1,s+1+n,cmp);        
        for(i=1;i<=n;++i) sum[i]=sum[i-1]+s[i].a;   
        memset(f,127,sizeof(f));  
        f[0][0]=0;    
        for(i=1;i<=n;++i) 
        {
            for(j=0;j<=sum[i];++j) 
            {
                if(j>=s[i].a) 
                {
                    f[i][j]=min(f[i][j], max(f[i-1][j-s[i].a], j+s[i].b));    
                }
                f[i][j]=min(f[i][j], max(f[i-1][j], sum[i]-j+s[i].b));               
            }
        }
        int ans=1000000000;  
        for(i=1;i<=sum[n];++i) 
        {
            ans=min(ans, f[n][i]);   
        }
        printf("%d
    ",ans);        
        return 0; 
    }
    

      

  • 相关阅读:
    girdview
    c#中&&,||的应用
    ToString()和Convert.ToString()的区别
    日期格式化
    线程间操作ui
    基于k3cloud做的东西
    格式化金额字段添加千位符
    SQL 分页查询
    xammp 配置虚拟主机
    jQuery事件对象event的属性和方法
  • 原文地址:https://www.cnblogs.com/guangheli/p/11585060.html
Copyright © 2011-2022 走看看