Time Limit: 15000/10000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit 
Status

The story happened long long ago. One day, Cao Cao made a special order called "Chicken Rib" to his army. No one got his point and all became

very panic. However, Cao Cao himself felt very proud of his interesting idea and enjoyed it.

Xiu Yang, one of the cleverest counselors of Cao Cao, understood the command Rather than keep it to himself, he told the point to the whole army.

Cao Cao got very angry at his cleverness and would like to punish Xiu Yang. But how can you punish someone because he's clever? By looking at

the chicken rib, he finally got a new idea to punish Xiu Yang.

He told Xiu Yang that as his reward of encrypting the special order, he could take as many gold sticks as possible from his desk. But he could only

use one stick as the container.

Formally, we can treat the container stick as an L length
segment. And the gold sticks as segments too. There were many gold sticks with different

length ai and
value vi.
Xiu Yang needed to put these gold segments onto the container segment. No gold segment was allowed to be overlapped.

Luckily, Xiu Yang came up with a good idea. On the two sides of the container, he could make part of the gold sticks outside the container as long

as the center of the gravity of each gold stick was still within the container. This could help him get more valuable gold sticks.

As a result, Xiu Yang took too many gold sticks which made Cao Cao much more angry. Cao Cao killed Xiu Yang before he made himself home. So

no one knows how many gold sticks Xiu Yang made it in the container.

Can you help solve the mystery by finding out what's the maximum value of the gold sticks Xiu Yang could have taken?

Input

The first line of the input gives the number of test cases, T(1≤T≤100). T test
cases follow. Each test case start

with two integers, N(1≤N≤1000)
and L(1≤L≤2000),
represents the number of gold sticks and the length

of the container stick. N lines
follow. Each line consist of two integers, ai(1≤ai≤2000)
and vi(1≤vi≤109),

represents the length and the value of the ith gold
stick.

Output

For each test case, output one line containing Case
#x: y
, where x is
the test case number (starting from 1)
and y is

the maximum value of the gold sticks Xiu Yang could have taken.

Sample input and output

Sample Input Sample Output
4

3 7
4 1
2 1
8 1 3 7
4 2
2 1
8 4 3 5
4 1
2 2
8 9 1 1
10 3
Case #1: 2
Case #2: 6
Case #3: 11
Case #4: 3

Hint

In the third case, assume the container is lay on x-axis
from 0 to 5.
Xiu Yang could put the second gold stick center at 0 and
put the third gold stick

center at 5,
so none of them will drop and he can get total 2+9=11 value.
In the fourth case, Xiu Yang could just put the only gold stick center

on any position of [0,1],
and he can get the value of 3

题意:给你一根长为m的长木板和一些小木棒,每一根小木棒有它的长度和价值,这些小木棒要放在长木板上并且每一根小木棒的重心要在长木板上

(即可以露出一半的长),问最大价值是多少。

思路:主要是dp方程要想到,用dp[i][j][k]表示处理到第i根木棒,长木板用了j的长度,有k根露在外面的最大价值,因为对于每根木棒,有三种情况,

一种是不放,一种是放在木板里面,还有一种是放在木板外面。这里注意要用滚动数组,不然会超内存。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 0x7fffffff
#define maxn 4005
ll l[maxn],v[maxn];
ll dp[2][maxn*2][3]; int main()
{
int n,m,i,j,T,len,cas=0;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
m*=2;
for(i=1;i<=n;i++){
scanf("%lld%lld",&l[i],&v[i]);
l[i]*=2;
} memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++){
//不放
for(j=0;j<=m;j++){
dp[1][j][0]=dp[0][j][0];
dp[1][j][1]=dp[0][j][1];
dp[1][j][2]=dp[0][j][2];
}
//放里面
for(j=m;j>=l[i];j--){
dp[1][j][0]=max(dp[1][j][0],dp[0][j-l[i] ][0]+v[i]);
dp[1][j][1]=max(dp[1][j][1],dp[0][j-l[i] ][1]+v[i]);
dp[1][j][2]=max(dp[1][j][2],dp[0][j-l[i] ][2]+v[i]);
}
//放外面
for(j=m;j>=l[i]/2;j--){
dp[1][j][1]=max(dp[1][j][1],dp[0][j-l[i]/2 ][0]+v[i]);
dp[1][j][2]=max(dp[1][j][2],dp[0][j-l[i]/2 ][1]+v[i]);
} for(j=0;j<=m;j++){
dp[0][j][0]=dp[1][j][0];
dp[0][j][1]=dp[1][j][1];
dp[0][j][2]=dp[1][j][2];
} }
ll ans=dp[1][m][0];
ans=max(ans,dp[1][m][1]);
ans=max(ans,dp[1][m][2]);
for(i=1;i<=n;i++){
ans=max(ans,v[i]);
}
cas++;
printf("Case #%d: %lld\n",cas,ans);
}
}

UESTC 1218 Pick The Sticks的更多相关文章

  1. ACM学习历程—UESTC 1218 Pick The Sticks(动态规划)(2015CCPC D)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 题目大意就是求n根木棒能不能放进一个容器里,乍一看像01背包,但是容器的两端可以溢出容器,只要两端的木 ...

  2. DP(01背包) UESTC 1218 Pick The Sticks (15CCPC C)

    题目传送门 题意:长度为L的金条,将n根金棍尽可能放上去,要求重心在L上,使得价值最大,最多有两条可以长度折半的放上去. 分析:首先长度可能为奇数,先*2.然后除了两条特殊的金棍就是01背包,所以dp ...

  3. CDOJ 1218 Pick The Sticks

    Pick The Sticks Time Limit: 15000/10000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others ...

  4. uestc oj 1218 Pick The Sticks (01背包变形)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可 ...

  5. The 2015 China Collegiate Programming Contest D.Pick The Sticks hdu 5543

    Pick The Sticks Time Limit: 15000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others ...

  6. 2015南阳CCPC D - Pick The Sticks dp

    D - Pick The Sticks Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description The story happened lon ...

  7. 2015南阳CCPC D - Pick The Sticks 背包DP.

    D - Pick The Sticks Description The story happened long long ago. One day, Cao Cao made a special or ...

  8. 2015 CCPC D- Pick The Sticks(UESTC 1218) (01背包变形)

    http://acm.uestc.edu.cn/#/problem/show/1218 既然二维dp表示不了,就加一维表示是否在边界放置,放置一个,两个.有一个trick就是如果只放一根,那么多长都可 ...

  9. hdu 5543 Pick The Sticks(动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543 题意:给你一根长为m的长木板和一些小木棒,每一根小木棒有它的长度和价值,这些小木棒要放在长木板上 ...

随机推荐

  1. docker 容器和镜像的常用命令

    镜像 docker rmi 镜像id -f # 删除指定镜像 docker rmi 镜像id 镜像id -f # 删除多个镜像 docker rmi -f $(docker images -aq) # ...

  2. 最新详解android自动化无障碍服务accessibilityservice以及高版本问题_1_如何开启获得无障碍

    前言 无障碍服务accessibilityservice是什么 简单来说 无障碍服务就是一个为残障人士 尤其是视觉障碍人士提供的一个帮助服务.具体就是可以识别控件 文字 可以配合语音助手 操作和 使用 ...

  3. SAP中的事务锁

    我们知道sap中的事物锁tcode是SM01. 细细研究发现,其实无外乎就是将tstc表中的事务码对应的字段CINFO的值加上HEX20 解锁就是还原成原来的值. 当然也发现了,调用了一个系统函数AU ...

  4. 拒演"拼命工作"的苦情戏,如何更聪明地提高工作效率?

    前几天PDD的事情又把互联网打工人的工作状态推向了大众视野,引起了大家的口诛笔伐.但是目前来看这种愤慨终究是暂时的,作用甚微.在大环境短时间无法改变的前提下,想想如何应对,或许比在网上愤愤不平破口大骂 ...

  5. 处理 K8S Orphaned pod found - but volume paths are still present on disk 孤儿pod

    问题概述 查看kubelet或/var/log/messages日志一直包错,发现是孤儿pod,是由于其pod被删除后存储路径还保存在磁盘. 报错如下 [root@node5 ~]# journalc ...

  6. 前端面试准备笔记之JavaScript(01)

    1.1 typeof 能判断哪些类型? typeof可以识别所有的值类型 typeof可以识别函数 //function typeof可以判断是否是引用类型(不可以再细分) //object 1.2 ...

  7. YARN运行流程

  8. layui的tabletree扩展组件

    需求:点击父级菜单展示子级菜单 难点:某个父级菜单下面有5000条子级菜单(有点坑),当我想把这5000条子级菜单塞到父级菜单下面的时候完蛋了,页面卡死了... 解决:tabletree这组件我发现用 ...

  9. 关于js中each()使用return不能终止循环

    Jquery的each里面用return false代替break:return ture代替continue $(xx).each(function() { if(xx){ return false ...

  10. Box Model 盒子模型

    Box Model盒子模型,是初学者在学习HTMl5时会学到的一个重要的模型,也有一些人称它为框模型,因为盒子是属于3维,而框是平面的.称之为盒子模型,是因为其结构和盒子十分相似,其最外面是margi ...