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 ...
随机推荐
- Centos7.6 Apache 虚拟机禁止访问IP,允许访问多域名多个虚拟目录设置
存放配置文件路径 /etc/httpd/conf.d自定义命名,配置文件后缀格式确保 *.conf注:这是两个配置文件,也是两种方法. # 一个WEB目录# 禁止以IP地址形式访问<Virtua ...
- glibc提供的malloc()的调试工具
关键词:MALLOC_CHECK_.mtrace().muntrace().MALLOC_TRACE.mprobe().-lmcheck等等. 1. MALLOC_CHECK_环境变量(double ...
- WPF 精修篇 DataGrid 筛选
原文:WPF 精修篇 DataGrid 筛选 DataGrid也可以分组 但是用的地方不多 就没写 筛选还是可以的 比如Datagrid数据量比较大 要做数据筛选 贴码 <DataGrid x: ...
- 用VB脚本复制文件夹并跳过重复文件
VB中可通过 scripting.filesystemobject 对象操作文件,其中复制文件或文件夹的函数参数可选覆盖或不覆盖.选择覆盖时,如果目标路径存在同名文件或文件夹,则替换掉已存在的文件.而 ...
- vscode源码分析【九】窗口里的主要元素
第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...
- 理解Promise.all,Promise.all与Promise.race的区别,如何让Promise.all在rejected失败后依然返回resolved成功结果
壹 ❀ 引 我在 es6入门4--promise详解 这篇文章中有详细介绍Promise对象的用法,文章主题更偏向于对于Promise概念的理解与各方法基本使用介绍:而世上一个比较有趣的问题就是,即 ...
- VMware下扩展Ubuntu根分区大小
一.查看磁盘信息 使用df命令用来查看文件系统的磁盘空间占用情况,由下可知我的/dev/sda1分区是挂载在根目录下的,本文目标就是来扩容/dev/sda1分区. 二.下载Gparted工具 Gpar ...
- 使用suds模块进行封装,处理webservice类型的接口
import json from suds.client import Client class HandleWebservice: ''' 定义一个webservice类型的接口处理类 ''' de ...
- springboot实践1
环境安装 安装jdk 推荐安装jkd1.8+,我使用的是mac,假设已经安装好homebrew,则jdk的安装指令是: brew install java 在 ~/zshrc ,添加两行 export ...
- HTTP/2 新特性总结
我在想了解HTTP/2的时候,查阅了很多资料,发现这篇很好,是外国的文章.我翻译过来,加入自己的一点理解. HTTP/2 更简单,高效,强大.它在传输层解决了以前我们HTTP1.x中一直存在的问题.使 ...