zoukankan      html  css  js  c++  java
  • bzoj2073 PRZ

    Description

    一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时只能分批过,当一组全部过去时,下一组才能接着过. 队伍里每个人过桥都需要特定的时间,当一批队员过桥时时间应该算走得最慢的那一个,每个人也有特定的重量,我们想知道如何分批过桥能使总时间最少.

    Input

    第一行两个数: w – 桥能承受的最大重量(100 <= w <= 400) 和 n – 队员总数(1 <= n <= 16). 接下来n 行每行两个数分别表示: t – 该队员过桥所需时间(1 <= t <= 50) 和 w – 该队员的重量(10 <= w <= 100).

    Output

    输出一个数表示最少的过桥时间.

    Sample Input

    100 3
    24 60
    10 40
    18 50

    Sample Output

    42
     
    状压dp
    首先把每一种可能的组的时间和总重量算出来,然后每次枚举子集表示最后刚加入的组。
    //Serene
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int maxn=18,maxs=(1<<16)+10;
    int W,n,t[maxn],w[maxn],mi[maxn],f[maxs],g[maxs],ans[maxs];
     
    int aa;char cc;
    int read() {
        aa=0;cc=getchar();
        while(cc<'0'||cc>'9') cc=getchar();
        while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
        return aa;
    }
     
    int main() {
        W=read();n=read();
        for(int i=1;i<=n;++i) t[i]=read(),w[i]=read();
        mi[1]=1;
        for(int i=2;i<=n;++i) mi[i]=mi[i-1]<<1;
        for(int i=1;i<(1<<n);++i) {
            for(int j=1;j<=n;++j) if((mi[j]|i)==i) {
                g[i]+=w[j];
                f[i]=max(f[i],t[j]);
            }
        }
        memset(ans,0x3f3f3f3f,sizeof(ans));
        ans[0]=0;
        for(int i=1;i<(1<<n);++i) {
            for(int j=i;j;j=i&(j-1)) if(g[j]<=W) ans[i]=min(ans[i],ans[i^j]+f[j]);
        }
        printf("%d",ans[(1<<n)-1]);
        return 0;
    }
    
    弱者就是会被欺负呀
  • 相关阅读:
    iOS-SetNeedsLayout,layoutNeeded和layoutSubviews方法之间的关系
    iOS-基础知识-assign,copy,retain,strong,weak的区别
    iOS中单例的两种方法
    iOS-项目国际化
    iOS-项目分析,框架搭建
    iOS-项目远程推送1
    iOS-developer.Apple开发账号操作步骤
    iOS系统办公软件ppt等如何转换windows下可以打开的格式
    iOS-Senior18-第三方初级
    iOS-Senior23-科大讯飞语音识别2
  • 原文地址:https://www.cnblogs.com/Serene-shixinyi/p/7481588.html
Copyright © 2011-2022 走看看