叠放箱子问题-SSL 1640
来源:互联网 发布:移动网络电视怎么收费 编辑:程序博客网 时间:2024/06/12 01:51
Description 某港口有一批集装箱,将其编号,分别为1至N。每一个箱子的外型尺寸都是一样的,现在要将其中某些集装箱叠放起来,集装箱叠放的规则如下: 1)每个集装箱上最多只能直接叠放一个集装箱。 2)编号较小的集装箱不能放在编号较大的集装箱之上。 3)每个集装箱都给出了自身的重量和可承受的重量,每个集装箱之上的所有集装箱重量之和不得超过该集装箱的可承受的重量。 现在要求你编程,从中选出最多个集装箱,使之在满足以上条件的情况下叠放起来,即要求叠得尽可能地高。 Input 第一行是一个正整数N,表示共有N个集装箱(1≤ N ≤1000)。 以下共有N行,每行两个正整数,中间用空格分隔,分别表示每个集装箱的自身重量和可承受的重量,两个数均为小于等于3000。 Output 输出最多可叠放的集装箱总数。运行时间不超过去时10秒。Sample Input 5 19 15 7 13 5 7 6 8 1 2Sample Output 4题解:这道题用dp,ans用来统计最多可叠放装箱的总数,j>=w[i] 并且 c[i]>=j-w[i],F[i,j]:=Min{F[i-1,j],F[i-1,j-1]+Weight[i] } Ans:=Max(J |F[i,j] )(F[i,j]〈=support[i]〉)const maxn=1000;var w,c:array[1..maxn] of longint; f:array[1..maxn+1,0..6000] of longint; n,i,j,ans:longint;function max(a,b:longint):longint;begin if a<b then exit(b) else exit(a);end;begin fillchar(f,sizeof(f),200); readln(n); for i:=1 to n do readln(w[i],c[i]); f[n+1,0]:=0; for i:=n downto 1 do for j:=0 to 6000 do begin f[i,j]:=f[i+1,j]; if (j>=w[i]) and (c[i]>=j-w[i]) then f[i,j]:=max(f[i,j],f[i+1,j-w[i]]+1); end; ans:=0; for i:=0 to 6000 do ans:=max(ans,f[1,i]); writeln(ans);end.
0 0
- 叠放箱子问题-SSL 1640
- SSL 1640——叠放箱子问题
- 叠放箱子问题
- 叠放箱子问题
- 叠放箱子问题
- 叠放箱子问题
- (ssl1640)叠放箱子问题
- 1640叠放箱子
- 叠放箱子
- 动态规划:叠放箱子
- 箱子问题(贪心)
- 箱子开闭问题
- 推箱子问题
- 堆箱子问题
- 堆箱子问题
- 箱子与小球的问题!
- 简易版推箱子问题
- 链表箱子排序问题
- json教程系列(4)-optXXX方法的使用
- Java语言基础
- python学习笔记(一):数和四则运算
- C++枚举类型详解
- json教程系列(5)-json错误解析net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
- 叠放箱子问题-SSL 1640
- Ubuntu下Web服务器的搭建
- 455. Assign Cookies
- Json 和 Jsonlib 的使用
- JS+Jquery:2048游戏
- [HDU] 1879 继续畅通工程
- 面向对象知识点
- Java泛型-类型擦除
- 连接oracle11g数据库的jdbc的查询操作