金砖

Problem

有一个长度为L的板凳,可以放一排金砖,金砖不能重叠。特别的,摆放的金砖可以超出板凳,前提是必须保证该金砖不会掉下去,即该金砖的重心必须在板凳上。

每块金砖都一个长度和价值,且金砖是规则的长方体。请计算最多可以摆放多少价值的金砖。

Input Data

第一行,两个整数N和L,分别表示金砖的数量和板凳的长度。

接下来N行,每行两个整数,ai和vi,分别表示第i块金砖的长度和价值。

Output Data

一行,一个整数,表示最大价值。

Input Sample 1

3 7
4 1
2 1
8 1

Output Sample 1

2

Input Sample 2

3 5
4 1
2 2
8 9

Output Sample 2

11

Input Sample 3

1 1
10 3

Output Sample 3

3

思路

要做这道题,得先掌握背包的一般思路,这里就不细讲了。

先说下思路。

At first,处理奇数长度的情况(没考虑清楚会WA一个点),因为对于奇数长度金砖,重心位置会出现小数的情况,这就让人很难堪。不过,可以把所有相关长度都乘2,或理解为以0.5为单位长度,这样就不用管奇数长度的情况了。

Secondly,咋处理能长出板凳的情况???直接按题目思路不好考虑,就把它转换一下吧。首先,我们很容易得知,最边上的两块要最靠边,及刚好不掉下去,这样可以腾出更大的空间给放在中间的金砖s。然后呢?有些人可能会想预处理出所有不超过板凳长度能放多少价值,再枚举两边的金砖,最后取最大值。However,重复取金砖的情况怎么考虑???其实我们可以当做最靠边的金砖长度打五折,或者说有两个金砖长度折半,具体实现就是把f数组再开一维记录已经取了几个“半价“金砖,最后取最大值即可。

Finally,还要考虑长度远大于L的金砖(更严谨地说,就是指长度 > 2 * L的金砖),它们即使“半价”处理也无法放上板凳,但是实际上可以把金砖的重心刚好放在板凳上,两边尽管长出去。好在这种情况会使金砖独占板凳,所以说直接用v来更新ans的值。

具体实现就在下面啦:

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 4005
#define LL long long int N, L;
LL f[MAXN]; int main(){
scanf( "%d%d", &N, &L ); L *= 2;
LL ans(0);//注意开long long !important
for ( int i = 1; i <= N; ++i ){
LL a, v;
scanf( "%lld%lld", &a, &v );
a *= 2;
if ( a > L * 2 ) ans = max( ans, v );
else
for ( int j = L; j >= 1; --j ){//注意零一背包要倒过来
for ( int k = 0; k <= 2; ++k ){
if ( j >= a ) f[j][k] = max( f[j][k], f[j - a][k] + v );//放在中间
if ( k && j >= a / 2 ) f[j][k] = max( f[j][k], f[j - a / 2][k - 1] + v );//放在两边,既“半价处理”
ans = max( ans, f[j][k] );//更新ans的值
}
}
}
printf( "%lld", ans );
return 0;
}

撒花!(刚好下课)

「2015南阳CCPC D」金砖 解题报告的更多相关文章

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

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

  2. 2015南阳CCPC E - Ba Gua Zhen 高斯消元 xor最大

    Ba Gua Zhen Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description During the Three-Kingdom perio ...

  3. 2015南阳CCPC F - The Battle of Guandu 多源多汇最短路

    The Battle of Guandu Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description In the year of 200, t ...

  4. 2015南阳CCPC L - Huatuo's Medicine 水题

    L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous ...

  5. 2015南阳CCPC H - Sudoku 暴力

    H - Sudoku Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Yi Sima was one of the best cou ...

  6. 2015南阳CCPC G - Ancient Go 暴力

    G - Ancient Go Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Yu Zhou likes to play Go wi ...

  7. 2015南阳CCPC C - The Battle of Chibi DP

    C - The Battle of Chibi Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Cao Cao made up a ...

  8. 2015南阳CCPC A - Secrete Master Plan 水题

    D. Duff in Beach Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Master Mind KongMing gave ...

  9. 2015 南阳ccpc The Battle of Chibi (uestc 1217)

    题意:给定一个序列,找出长度为m的严格递增序列的个数. 思路:用dp[i][j]表示长度为i的序列以下标j结尾的总个数.三层for循环肯定超时,首先离散化,离散化之后就可以用树状数组来优化,快速查找下 ...

随机推荐

  1. @loj - 2289@「THUWC 2017」在美妙的数学王国中畅游

    目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个点编号 0 到 n-1,每个点有一个从 [0,1] 映射到 ...

  2. @雅礼集训01/10 - T1@ matrix

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个矩阵.求它的所有子矩阵中本质不同的行的个数之和. inp ...

  3. hdu 2312 Cliff Climbing (pfs)

    Problem - 2312 一条很暴力,有点恶心的搜索.题意其实很简单,主要是pfs的时候拓展结点会有种麻烦的感觉.注意的是,这里的n和m跟平常见到的有所不同,交换过来了.我的代码就是在因为这个长宽 ...

  4. Layer(Web弹窗)

    Layer弹窗的用法: <script src="jQuery的路径"></script> <!-- 你必须先引入jQuery1.8或以上版本 --& ...

  5. excel求和结果不对

    excel求和结果不对 Excel求和功能是excel中最常用的功能,但是很多时候会碰到各种错误,比如求和结果总是0.公式求和结果和用计算器敲出来的结果不一样.更新了数据但是求和结果没有变等等.本经验 ...

  6. jq动画和停止动画

    使用jq 实现动画循环效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  7. codeforces 616D

    题意:给你n个数,找出一个最大的区间,满足:不同的数值个数不超过k; //我开始又看错题了. 以为是找出一个最大区间,里面的数的最大值不超过k; 思路:利用一个窗口滑动,左端点表示当前位置,右端点表示 ...

  8. BZOJ 4034"树上操作"(DFS序+线段树)

    传送门 •题意 有一棵点数为 N 的树,以点 1 为根,且树点有边权. 然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的 ...

  9. 走过的laravel-admin 的坑

    一.http://laravel-admin.org/docs/#/zh/  大家可以根据这个安装1.5 版本的laravel后台管理, 他很方便哦,有很多方法他都自己自己封装了. 二.大家如果想好好 ...

  10. win10 uwp 商业游戏 1.1.5

    本文是在win10 uwp 商业游戏 基础上继续开发,添加一些无聊的游戏 因为在发布几个月,下载量很少,小伙伴说游戏就玩不到几分钟就不想玩,于是我就想加入其他游戏 下面我来告诉大家如何在游戏中添加多个 ...