「2015南阳CCPC D」金砖 解题报告
金砖
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」金砖 解题报告的更多相关文章
- 2015南阳CCPC D - Pick The Sticks dp
D - Pick The Sticks Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description The story happened lon ...
- 2015南阳CCPC E - Ba Gua Zhen 高斯消元 xor最大
Ba Gua Zhen Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description During the Three-Kingdom perio ...
- 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 ...
- 2015南阳CCPC L - Huatuo's Medicine 水题
L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous ...
- 2015南阳CCPC H - Sudoku 暴力
H - Sudoku Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Yi Sima was one of the best cou ...
- 2015南阳CCPC G - Ancient Go 暴力
G - Ancient Go Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Yu Zhou likes to play Go wi ...
- 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 ...
- 2015南阳CCPC A - Secrete Master Plan 水题
D. Duff in Beach Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Master Mind KongMing gave ...
- 2015 南阳ccpc The Battle of Chibi (uestc 1217)
题意:给定一个序列,找出长度为m的严格递增序列的个数. 思路:用dp[i][j]表示长度为i的序列以下标j结尾的总个数.三层for循环肯定超时,首先离散化,离散化之后就可以用树状数组来优化,快速查找下 ...
随机推荐
- 谷歌BERT预训练源码解析(一):训练数据生成
目录预训练源码结构简介输入输出源码解析参数主函数创建训练实例下一句预测&实例生成随机遮蔽输出结果一览预训练源码结构简介关于BERT,简单来说,它是一个基于Transformer架构,结合遮蔽词 ...
- 关于RESTful一些注意事项,和自己整理的接口开发规范
https://blog.csdn.net/u013731455/article/details/56278168 最近在研究restful,公司开发要使用,所以自己就去网上找了好些资料,并整理了一套 ...
- laravel 定时任务通过队列发送邮件
https://www.jianshu.com/p/f6b94596098e 关于laravel发送邮件,请先参考我的另一片文章:laravel sendcloud发送邮件,再继续往下看. 1.用da ...
- javascript 容易混淆遗忘的基础知识
1. 标识符 所谓标识符,就是指变量.函数.属性的名字,或者函数的参数.标识符可以是按照下列格式规则组合起来的一或多个字符: 1.1 第一个字符必须是一个字母.下划线( _ )或 ...
- 移动端Chrome Inspect调试 (Android通过Chrome Inspect调试WebView的H5)(ios手机safari,chrome调试 windows)(如果inspect的时候,是空白)
ios +chrome调试 引用https://segmentfault.com/a/1190000015428430 iTunes ios-webkit-debug-proxy-1.8-win64- ...
- WOE:信用评分卡模型中的变量离散化方法(生存分析)
WOE:信用评分卡模型中的变量离散化方法 2016-03-21 生存分析 在做回归模型时,因临床需要常常需要对连续性的变量离散化,诸如年龄,分为老.中.青三组,一般的做法是ROC或者X-tile等等. ...
- Vue基础练习之计算属性、方法、监听器
<body> <div id="root"> {{fullName()}} {{age}} </div> <script> var ...
- H3C VLAN基本配置
- 2018-2-13-Visual-studio-C#-代码使用-NotNull
title author date CreateTime categories Visual studio C# 代码使用 NotNull lindexi 2018-2-13 17:23:3 +080 ...
- P4556 [Vani有约会]雨天的尾巴 (线段树合并)
P4556 [Vani有约会]雨天的尾巴 题意: 首先村落里的一共有n座房屋,并形成一个树状结构.然后救济粮分m次发放,每次选择两个房屋(x,y),然后对于x到y的路径上(含x和y)每座房子里发放一袋 ...