• BZOJ 2073: [POI2004]PRZ( 状压dp )


    早上这道题没调完就去玩NOI网络同步赛了....

    状压dp , dp( s ) 表示 s 状态下所用的最短时间 , 转移就直接暴力枚举子集 . 可以先预处理出每个状态下的重量和时间的信息 . 复杂度是 O( 2^n + 3^n ) 可以过

    ----------------------------------------------------------------

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
     
    #define rep(i ,n) for(int i=0; i < n; ++i)
    #define clr(x ,c) memset(x, c, sizeof(x))
    #define b(i) (1 <<(i))
     
    using namespace std;
     
    const int maxn = 16;
    const int inf = 100000000;
     
    int lim, n, T[maxn], W[maxn];
    int _T[1 << maxn], _W[1 << maxn];
    int d[1 << maxn];
     
    void init() {
    cin >> lim >> n;
    rep(i, n) scanf("%d%d", T + i, W + i);
    rep(i, b(n)) {
    _T[i] = _W[i] = 0;
    rep(j, n) if(i & b(j)) {
       _T[i] = max(_T[i], T[j]);
       _W[i] += W[j];
    }
    }
    }
     
    int dp(int s) {
    int &t = d[s];
    if(t != -1) return t;
    t = _W[s] <= lim ? _T[s] : inf;
    for(int _s = (s - 1) & s; _s; _s = (_s - 1) & s)
       t = min(t, dp(_s) + dp(s ^ _s));
    return t;
    }
     
    void work() {
    clr(d, -1);
    d[0] = 0;
    rep(i, n) 
       d[b(i)] = _T[b(i)];
    printf("%d ", dp(b(n) - 1));
    }
     
    int main(){
    freopen( "test.in" , "r" , stdin );
    init();
    work();
    return 0;

    ----------------------------------------------------------------

    2073: [POI2004]PRZ

    Time Limit: 10 Sec  Memory Limit: 64 MB
    Submit: 115  Solved: 81
    [Submit][Status][Discuss]

    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

    HINT

    Source

  • 相关阅读:
    no,no,不要使用kill -9
    Linux中etc目录详解
    Quartz任务调度器的使用
    RMI(Remote Method invocation,远程方法访问)
    SilverLight扩展控件RadTreeView
    SiverLight和HTML交互
    SilverLight控件之ContextMenu和RadContextMenu(菜单)
    SilverLight之向后台请求数据-WebClient
    SilverLight控件样式及控件模版
    在SilverLight中代码编写可选择树节点
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/4654354.html
Copyright © 2020-2023  润新知