• BZOJ 1739: [Usaco2005 mar]Space Elevator 太空电梯


    题目

    1739: [Usaco2005 mar]Space Elevator 太空电梯

    Time Limit: 5 Sec  Memory Limit: 64 MB

    Description

    The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a giant tower of blocks. They have K (1 <= K <= 400) different types of blocks with which to build the tower. Each block of type i has height h_i (1 <= h_i <= 100) and is available in quantity c_i (1 <= c_i <= 10). Due to possible damage caused by cosmic rays, no part of a block of type i can exceed a maximum altitude a_i (1 <= a_i <= 40000). Help the cows build the tallest space elevator possible by stacking blocks on top of each other according to the rules.

    牛们要到太空去了!他们打算建造一座太空电梯来送他们进入轨道.
    有K(1≤K≤400)神方块,第i种有一个特定的高度hi(l≤hi≤100),一定的存量ci(l≤ci≤10).为防宇宙射线的破坏,第i种方块的任何部分不能超过高度ai(l≤ai≤40000). 请用这些方块堆出最高的太空电梯.

    Input

    * Line 1: A single integer, K * Lines 2..K+1: Each line contains three space-separated integers: h_i, a_i, and c_i. Line i+1 describes block type i.

     
        第1行输入一个整数K.
        接下来K行,每行输入三个整数hi,ai,ci.

    Output

    * Line 1: A single integer H, the maximum height of a tower that can be built

     
        一个整数,表示最大高度.

    Sample Input

    3
    7 40 3
    5 23 8
    2 52 6

    Sample Output

    48
    从底部开始,先放3个方块2,之后3个方块1,接下来6个方块3.不能把3个方块1堆到4个方
    块2上,因为这样最高的方块1的顶部高度超过了40.

    HINT

     

    Source

     

    题解

    Orz考完小四门的期中考试,来刷刷水题愉悦一下身心!Orz坑爹的生物一共75分钟竟然70道选择题一堆大题,我还好几周没去,呵呵~好的,这道题目其实就是做n遍有限背包~

    代码

     1 /*Author:WNJXYK*/
     2 #include<cstdio>
     3 #include<algorithm> 
     4 using namespace std;
     5 
     6 struct Node{
     7     int c;
     8     int h;
     9     int a;
    10 }; 
    11 Node k[405];
    12 bool f[40005];
    13 bool cmp(Node a,Node b){
    14     if (a.a<b.a)return true;
    15     return false;
    16 }
    17 int n;
    18 int main(){
    19     scanf("%d",&n);
    20     for (int i=1;i<=n;i++) scanf("%d%d%d",&k[i].h,&k[i].a,&k[i].c);
    21     f[0]=true;
    22     sort(k+1,k+n+1,cmp);
    23     for (int i=1;i<=n;i++){
    24         for (int h=k[i].a;h>=0;h--){
    25             for (int j=1;j<=k[i].c&&k[i].h*j+h<=k[i].a;j++){
    26                 f[k[i].h*j+h]=f[k[i].h*j+h]||f[h];
    27             }
    28         }
    29     }
    30     int Ans=0;
    31     for (int i=40000;i>=0;i--)
    32         if (f[i]){
    33             Ans=i;
    34             break;
    35         }
    36     printf("%d
    ",Ans);
    37     return 0;
    38 }
    View Code
  • 相关阅读:
    可恶的0x1A
    求关注 wcf bindipendpointdelegate 端口限制的功能
    2015 UESTC Training for Data Structures
    Codeforces Round #298 (Div. 2)
    利用rawcap抓包(自己发给自己的包裹)
    PYTHON POST练手
    CentOS安装Nginx 实现HTTP代理
    how to make vim show ^M and substitute it
    Oracle SQL Developer: cannot find a j2se sdk
    Codeforces Round #282 (Div. 2)
  • 原文地址:https://www.cnblogs.com/WNJXYK/p/4097996.html
Copyright © 2020-2023  润新知