jdoj 2171: Grape
jdoj 2171: Grape
题意
题目大意
一个农场的葡萄架上挂着n串葡萄,若取一个葡萄就会获得与其相应的美味值。对于连续的k串葡萄,最多取b串,最少取a串,
问能够获得的最大美味值为多少
数据范围
n<=10000,0<=a<=b<=k<=10
分析
考虑到在选到第i串葡萄时,影响到决策的只有i前面k串葡萄
f[i] [sta] 表示,考虑完第i串葡萄,后k串葡萄的状态为sta时的最大美味值
小技巧:
看看n的范围,再想想我们的状态表示,可得,
每次转移只需要前一个状态的信息
,所以我们可以用i&1
表示当前位置,那么(i+1)&1
就是下一个位置为了方便,不妨将这k串葡萄中的距离i最远的一串葡萄
使用最后一个二进制位表示
, 这样,我们在状态转移时>>1
即可
只有在a <= cnt[sta] <= b时才考虑转移,转移时状态或上 1<<k,不转移时在合法的时候取最大值即可。
向前推进max
/*
5 3 1 2
-1 1 2 -2 3
now_ans = 6
ans = 9
*/
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
const int N = 11;
const int MAX = (1<<N)-1;
#define lowbit (i&-i)
inline int read()
{
int x=0,f=1;char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-')f=-1;ch = getchar();}
while(ch >='0' && ch <='9'){x=(x<<1)+(x<<3)+ch-'0';ch = getchar();}
return x*f;
}
int n,k,a,b,sum, max_k;
int f[2][1<<N], val[10000+9], cnt[1<<N];
int getone(int i) {
int res = 0;
while(i) ++res, i -= lowbit;
return res;
}
int getval(int i) {
int res = 0, pos = 1;
while(i) {
if(i&1) res += val[pos];
i = i>>1, ++pos;
}
return res;
}
void pre() {
n = read(), k = read(), a = read(), b = read();
for(int i = 1; i <= n; i++) val[i] = read(), sum += val[i];
max_k = (1<<k)-1;
for(int i = 0; i <= max_k; i++) cnt[i] = getone(i);
for(int i = 0; i <= max_k; i++) if(cnt[i]>=a && cnt[i]<=b) f[k&1][i] = getval(i);
}
void solve() {
for(int i = k; i < n; i++) {//小技巧
int o = (i&1), op = (o+1)&1;//o表示当前第一维,op表示下一个第一维
memset(f[op], -0x3f, sizeof(f[op]));
for(int j = 0; j <= max_k; j++) if(cnt[j]>=a && cnt[j]<=b) {
int tmp1 = (j>>1), tmp2 = ((j|(1<<k))>>1);
//tmp1表示不选,tmp2表示选
if(cnt[tmp1]>=a && cnt[tmp1]<=b) f[op][tmp1] = max(f[op][tmp1], f[o][j]);//不减?
if(cnt[tmp2]>=a && cnt[tmp2]<=b) f[op][tmp2] = max(f[op][tmp2], f[o][j]+val[i+1]);
}
}
int ans = -2147483646;
for(int j = 0; j <= max_k; j++) if(cnt[j]>=a && cnt[j]<=b) ans = max(ans, f[n&1][j]);
printf("%d\n",ans*2-sum);
}
int main() {
pre();
solve();
return 0;
}
jdoj 2171: Grape的更多相关文章
- grape动态PHP结构(三)——API接口
一.app视图与控制器
- grape动态PHP结构(二)——管理后台
一.概述
- grape动态PHP结构(一)——目录结构与配置文件
一.结构介绍 结构的名字grape,中文名叫葡萄,因为最近一个同事经常带葡萄到公司给我们吃,受到启发想到了这个名字. 1)本结构需要在PHP5.5中运行,如果要在5.4中运行,有些地方就要做些修改 2 ...
- fzu 2171 防守阵地 II
Problem 2171 防守阵地 II Accept: 31 Submit: 112Time Limit: 3000 mSec Memory Limit : 32768 KB Prob ...
- Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant
Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant
- CJOJ 2171 火车站开饭店(树型动态规划)
CJOJ 2171 火车站开饭店(树型动态规划) Description 政府邀请了你在火车站开饭店,但不允许同时在两个相连的火车站开.任意两个火车站有且只有一条路径,每个火车站最多有 50 个和它相 ...
- 【Rails App】 应用服务器从Passenger切换为Puma, Grape出现线程安全问题
Grape中的代码如下: def market @market ||= Market.find(params[:id]) end @market基于类层次的实例变量,属于非线程安全,如果一直使用多线程 ...
- Chromium Embedded Framework (CEF)_3.2171.2069_v20170606_x86.tar.xz
CEF 为观看各个直播平台而特此修改的浏览器 可以单独提取 Flash 视频, 并可以修改视频的大小等功能 [增加了960x90% 和 1280x90%] 这次修改是主要针对 YY web 直播平台 ...
- Chromium Embedded Framework (CEF)_3.2171.1979_v20170602_x86.tar.xz
CEF 为观看各个直播平台而特此修改的浏览器 可以单独提取 Flash 视频, 并可以修改视频的大小等功能 这次修改是主要针对 YY web 直播平台 对录屏的朋友有很大帮组 CEF_3.2171.1 ...
随机推荐
- 解决brew update很慢
一般遇到这种问题,就跟墙有关啦,需要更换源. 用清华的源就非常好,去清华镜像的官网看一下说明,https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/ $ ...
- PM8909 linear charger硬件概述
电池充电是由qpnp-vm-bus.c(电池驱动BMS)和qpnp-linear-charger.c(线性充电器)组成: SMMB charger:Switch-ModeBattery Charger ...
- Linux下新增和使用系统调用
关键词:__SYSCALL().SYSCALL_DEFINEx().syscall()等等. 1. 为什么使用syscall 内核和用户空间数据交换有很多种方式:sysfs.proc.信号等等. 但是 ...
- JUC-4-CopyOnWriteArrayList
什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新 ...
- Tensorflow.nn 核心模块详解
看过前面的例子,会发现实现深度神经网络需要使用 tensorflow.nn 这个核心模块.我们通过源码来一探究竟. # Copyright 2015 Google Inc. All Rights Re ...
- PHP递归函数return返回null的问题
前段时间在写递归函数的时候碰到个问题,返回值一直为null,这里记录一下. 写个小例子: /** * @param $i * @return mixed */ function recursion($ ...
- Windows下cwrsync客户端与rsync群辉存储服务端定时数据同步
cwRsync简介 cwRsync是Rsync在Windows上的实现版本,Rsync通过使用特定算法的文件传输技术,可以在网络上传输只修改了的文件. cwRsync主要用于Windows上的远程文件 ...
- IT兄弟连 HTML5教程 HTML5的曲折发展过程 浏览器之间的大战
播放电影和音乐要使用播放器,浏览网页就需要使用浏览器.浏览器虽然只是一个设备,并不是开发语言,但在Web开发中必不可少,因为浏览器要去解析HTML5.CSS3和JavaScript等语言用于显示网页, ...
- Linux网络基础协议和ip管理
1.简述osi七层模型和TCP/IP五层模型 osi七层模型分别是:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. 1)物理层:这一层的主要功能是二进制传输数据,界定连接器和网线的规格: ...
- js-xlsx 实现前端 Excel 导出(支持多 sheet)
之前写文章介绍了使用 js-xlsx 实现导入 excel 的功能,现在再介绍一下如何使用 js-xlsx 进行 excel 导出. [实现步骤] 1. 首先安装依赖 npm install xlsx ...