(ssl1640)叠放箱子问题
来源:互联网 发布:唯品会网络异常 编辑:程序博客网 时间:2024/06/03 01:05
叠放箱子问题
Time Limit:10000MS Memory Limit:65536K
Total Submit:317 Accepted:119
Case Time Limit:1000MS
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 2
Sample Output
4
Source
CWJ
var f:array[1..1000,0..6000]of longint; //f(i,j)表示前i个箱子中最多可选出f(i,j)个叠放,还可承受重量j a,b:array[1..1000]of longint;//a是自身的重量,b是可承受的重量 n,i,j,ans:longint;function max(a,b:longint):longint;//状态转移方程begin if a>b then exit(a); exit(b);end;begin readln(n); for i:=1 to n do readln(a[i],b[i]); f[n,a[n]]:=1;//至少可以放一个 for i:=n-1 downto 1 do begin f[i]:=f[i+1];//先继承 for j:=0 to b[i] do f[i,j+a[i]]:=max(f[i+1,j]+1,f[i,j+a[i]]);//放或是不放 end; for i:=0 to 6000 do ans:=max(f[1,i],ans); writeln(ans);end.
0 0
- (ssl1640)叠放箱子问题
- 叠放箱子问题
- 叠放箱子问题
- 叠放箱子问题
- 叠放箱子问题
- 叠放箱子问题-SSL 1640
- 叠放箱子
- SSL 1640——叠放箱子问题
- 1640叠放箱子
- 动态规划:叠放箱子
- 箱子问题(贪心)
- 箱子开闭问题
- 推箱子问题
- 堆箱子问题
- 堆箱子问题
- 箱子与小球的问题!
- 简易版推箱子问题
- 链表箱子排序问题
- 机器学习之——Logistic回归
- ajax传递给asp.net mvc 后台数组参数方式
- HTML+CSS(7)
- 数据库连接之自定义pool
- 考研复试口语常见问题
- (ssl1640)叠放箱子问题
- jquery动态添加表单删除表单
- fastjson 使用方法
- MyBatis学习(一)
- C# 输入法
- yii2.0中使用jquery
- Elasticsearch经验总结(持续补充)
- #java#用junix进行单元测试
- js 鼠标经过显示隐藏效果实例