博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2392 Space Elevator
阅读量:5166 次
发布时间:2019-06-13

本文共 2005 字,大约阅读时间需要 6 分钟。

大意

n件物品,第i件hi高,有ci件,最高的一件不能超过ai的高度。问最高能堆多高输入第一行,一个n 

接下来每一行,为hi,ai,ci输出最高堆多高样例

输入

  3 

  7 40 3 
  5 23 8
  2 52 6

样例输出

  48 

(从下到上:3个2号,3个1号,6个3号)

 

多重背包

 

这是bool 数组记录能否到达的代码 200ms

 

#include
#include
using namespace std;struct s{ int h, a, c;}arr[405];bool cmp(s a, s b){ if(a.a != b.a) return a.a < b.a; return a.h < b.h;}bool dp[40105];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d%d",&arr[i].h,&arr[i].a,&arr[i].c); sort(arr+1,arr+n+1,cmp); dp[0] = true; for(int i=1;i<=n;i++){ for(int k=0;k
=0;j--){ if(j>=arr[i].h) dp[j] = dp[j] || dp[j] || dp[j-arr[i].h]; else dp[j] = dp[j] || dp[j]; } } int ans = 0; for(int i=0;i<40105;i++) if(dp[i])ans = i; printf("%d\n",ans); return 0;}
View Code

 

但是,可以进行优化。

定义dp[j] 表示 高度为 j 的堆剩余的第 i 件物品的个数。

那么, 在第 i 次循环中 如果 dp[j] 不为 -1 那就意味着 j 可以被 第 i 件物品构建出来(不论是用光了还是没用上)

所以第 i 件物品没有用上(构建 j 时)

转移表达式为 dp[j] := arr[i].c (第 i 件物品的初始数量)

 

如果 dp[j] == -1 那也就是说之前的 i-1 件物品没能构建出 j ,那我们就用 j - arr[i].h 这一堆加上一件 arr[i] 就可以构建出 j 了

判断一下 dp[ j - arr[i].h ] 是否被构建了 同时考虑好边界和细节就好了

转移表达式为 dp[j] := dp[j-arr[i].h] - 1

 

这是优化后的 int 数组记录第i件物品剩余个数的代码 47ms

 

#include
#include
#include
using namespace std;struct s{ int h, a, c;}arr[405];bool cmp(s a, s b){ if(a.a != b.a) return a.a < b.a; return a.h < b.h;}int dp[40105];int main(){ int n; scanf("%d",&n); for(int i=0;i
< n;i++){ for(int j=0;j <= arr[i].a;j++){ if(dp[j] >= 0) dp[j] = arr[i].c; else if(j >= arr[i].h && dp[j-arr[i].h] > 0) dp[j] = dp[j - arr[i].h] - 1; } } int ans = 0; for(int i=0;i<=arr[n-1].a;i++) if(dp[i] >= 0)ans = i; printf("%d\n",ans); return 0;}
View Code

转载于:https://www.cnblogs.com/kongbb/p/10447434.html

你可能感兴趣的文章
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>