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. SpringCloud Gateway快速入门

    SpringCloud Gateway cloud笔记第一部分 cloud笔记第二部分Hystrix 文章目录 SpringCloud Gateway Zull的工作模式与Gateway的对比 Rou ...

  2. PAT甲级 Perfect Sequence (25) 记忆化搜索

    题目分析: 意思是要求对于一个给出的数组,我们在其中尽可能多选数字,使得所选数字的max <= min * p,而由于数据量较大直接二层循环不加优化实现是不现实的,由题意得知,对于数字序列的子序 ...

  3. 二进制格式 PLY 模型文件的读取与渲染

    PLY 文件头部信息: ply format binary_little_endian 1.0 comment VCGLIB generated element vertex 13469 proper ...

  4. spring cloud config —— git配置管理

    目录 talk is cheep, show your the code Server端 pom.xml server的application.yml 配置文件 测试Server client端 po ...

  5. Linux监控工具vmstat命令

    当linux服务器的发生告警,我们要查看当前系统的状态值,包括CPU使用率,内存使用情况,虚拟内存交换情况,IO读写情况等. top与vmstat这两个监控工具都满足要求,当然top还可以看到各个进程 ...

  6. Received empty response from Zabbix Agent at [agent]. Assuming that agent dropped connection because of access permission

    Received empty response from Zabbix Agent at [agent]. Assuming that agent dropped connection because ...

  7. 【Git】2、Linux快速安装Git环境 & oh-my-zsh

    Linux快速安装Git环境 文章目录 Linux快速安装Git环境 1.Linux安装Git 2.安装zsh 3.安装oh-my-zsh 3.1.安装oh-my-zsh 3.2. 测试验证 4.小结 ...

  8. ctfshow——web_AK赛

    签到_观己 从题目描述中没发现什么有用的信息 发现文件包含 尝试使用PHP伪协议执行命令,发现无法执行 尝试使用远程文件包含,发现也未开启 尝试使用日志注入 记录了UA值,抓包写入一句话木马 使用蚁剑 ...

  9. [XAML] 使用 XAML 格式化工具:XAML Styler

    1. XAML 的问题 刚入门 WPF/UWP 之类的 XAML 平台,首先会接触到 XAML 这一新事物.初学 XAML 时对它的印象可以归纳为一个词:一坨. 随着我在 XAML 平台上工作的时间越 ...

  10. Vijos-P1103题解【线段树】

    本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: https://www.vijos.org/p/1103 题目描述: 一条马路从数轴0到L,每 ...