zoukankan      html  css  js  c++  java
  • JZOJ 1286. 太空电梯

    题目

    Description

      奶牛们想用K(1<=K<=400)中石块制造一个太空电梯去太空旅行,每种石块有自己的高度h_i(1<=h_i<=100)和数量c_i(1<=c_i<=10),为了避免宇宙射线的干扰,每种石块不能超过最高可以达到的高度a_i(1<=a_i<=40000)。
      帮助奶牛用石块堆积一个最高的太空电梯。
     

    Input

      第1行:一个整数K
      第2到K+1行:每行3个用空格隔开的整数h_i,a_i,c_i

    Output

      输出一个高度H,表示最大高度。
     

    Sample Input

    3
    7 40 3
    5 23 8
    2 52 6
    

    Sample Output

    48
     

    Data Constraint

     
     

    Hint

    【样例说明】
      从上到下依次是6个3号石块、3个1号石块和3个2号石块,注意放4个2号石块在3个1号石块的下面是不行的,因为1号石块最高不能超过40,而现在最上面的1号石块高度达到41,所以不行。

     

    分析

    显然可设f[i]f[i] 表示是否可以到达高度i
    每次枚举高度,看当前的点是否可以到达这个高度就可以了
    f[0] = 1

     

    代码

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 struct sb
     5 {
     6     int val,he,c;
     7 }a[1000010];
     8 int f[1000010];
     9 bool cmp(sb a,sb b){return a.he<b.he; }
    10 int main ()
    11 {
    12     int n;
    13     cin>>n;
    14     for (int i=1;i<=n;i++)
    15         cin>>a[i].val>>a[i].he>>a[i].c;
    16     sort(a+1,a+1+n,cmp);
    17     f[0]=1;
    18     for (int i=1;i<=n;i++)
    19         for (int k=a[i].he;k>=0;k--)
    20           for (int j=1;j<=a[i].c&&k+a[i].val*j<=a[i].he&&f[k]==1;j++)
    21              f[k+j*a[i].val]=1;
    22     for (int i=a[n].he;i>=1;i--) 
    23     {
    24         if (f[i]) {
    25             cout<<i;
    26             return 0;
    27         }
    28     }
    29     cout<<0;
    30 }
    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    关于ThreadLocal
    二月份推荐的书籍
    《编写高质量代码:改善Java程序的151个建议》笔记
    Oracle中定义package以及存储过程的使用
    不同系统平台下Java默认的安装路径
    WebSphere数据源配置
    Dedication(转)
    Upgrading to Java 8——第二章 Method References(方法引用)
    Upgrading to Java 8——第一章 Lambda表达式
    Multi-catch
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/10698983.html
Copyright © 2011-2022 走看看