hihoCoder week8 状态压缩·一
状态压缩 写了两个半小时 太菜了
题目链接 https://hihocoder.com/contest/hiho8/problem/1
#include <bits/stdc++.h>
using namespace std; const int N = ;
const int MAXN = <<;
int n, m, q, w[MAXN]; // 存取到达i时候, 前面m-1个的状态
int dp[][MAXN]; int Count(int x)
{
int cnt = ;
while(x) {
cnt += x%;
x/=;
}
return cnt;
} void print(int tmp)
{
int mx = ;
for(int st=; st<(<<m); st++) {
mx = max(mx, dp[tmp][st]);
}
cout << mx <<endl;
} void printAll()
{
for(int i=;i<n;i++) {
print(i);
}
}
int main()
{
//freopen("in.txt","r",stdin);
scanf("%d %d %d", &n, &m, &q);
for(int i=; i<n; i++) {
scanf("%d", &w[i]);
}
// 第0个选就是0 第0个不选就是 w[0]
dp[][] = ; dp[][] = w[];
for(int i=; i<n; i++) {
if(i < m) {
// 前m个很好转移,就是 dp[i][st] = dp[i-1][st];
// 记录前i-1个的状态的最优值 如果当前i能插入 就更新最优值
for(int st=; st<(<<(i)); st++) {
dp[i][st] = max(dp[i][st], dp[i-][st]);
if(Count(st) < q && (&(st>>i))== ) {
dp[i][st+(<<i)] = max(dp[i][st+(<<i)], dp[i][st] + w[i]);
}
}
}
else {
// 之前的记录的是 [i-m+1, i]
// 现在需要更新成 [i-m+2, i+1]
// 所以整体 i-m+1位不需要了 就是 dp[i][st>>1] = dp[i-1][st]
for(int st=; st < (<<m); st++) {
dp[i][st>>] = max(dp[i][st>>], dp[i-][st]);
} // 由于此时i>=m了 保证之前肯定有m-1个状态, 所以前m-1个状态 分别在[0, m-2]之间
// 因而此时的i 应该放在 m-1 位, 然后可以插入i, 就更新最优值
for(int st=; st<(<<m); st++) {
//int k = i%m + 1;
int k = m-;
if(Count(st) < q && ( & (st >> k))==) {
dp[i][st+(<<k)] = max(dp[i][st+(<<k)], dp[i][st] + w[i]);
}
}
}
}
//printAll();
print(n-);
return ;
}
hihoCoder week8 状态压缩·一的更多相关文章
- hihoCoder 1044 : 状态压缩·一 状压dp
思路:状态压缩,dp(i, j)表示考虑前i个数且[i-m+1, i]的选择情况为j.如果要选择当前这个数并且,数位1的个数不超过q,则dp[i+1][nex] = max(dp[i+1][nex], ...
- [hihoCoder] #1044 : 状态压缩·一
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市——那座城市即将 ...
- hihoCoder#1048 状态压缩·二
原题地址 位运算的状态压缩太操蛋了,很容易出错...又是数组没开够导致诡异现象(明明某个值是1,莫名其妙就变成0了),害我debug一整天!fuck 代码: #include <iostream ...
- hihocoder #1044 : 状态压缩·一 状压DP
http://hihocoder.com/problemset/problem/1044 可以看出来每一位的选取只与前m位有关,我们把每个位置起始的前m位选取状态看出01序列,就可以作为一个数字来存储 ...
- hihoCoder #1044 : 状态压缩·一 (清垃圾)
题意: 某车厢有一列座位,共有n个位置,清洁工要在这n个位置上清垃圾,但是不能全部位置都清理,只能选择部分.选择的规则是,连续的m个位置内,不能够清理超过q个,也就是说从第1~m个位置最多可以清q个, ...
- hihocoder 1334 - Word Construction - [hiho一下第170周][状态压缩+DFS]
题目链接:https://hihocoder.com/problemset/problem/1334 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given N wo ...
- HihoCoder第九周 状态压缩 二 与POJ2411总结
在此我向各位博友求助,特别想知道除了HihoCoder上面的结果要对1e9+7取余之外,这两道题还有什么其他的问题,都是骨牌覆盖问题,都是状态压缩+dp,为什么我能过poj2411的程序过不了Hiho ...
- HihoCoder 1044 垃圾清理 (优化:状态压缩)
状态压缩·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市— ...
- 【HIHOCODER 1044】题目1 : 状态压缩·一
描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市--那座城市即将举行美食节! 但是不幸的是,小Hi和小Ho并没有能够买到很好的火车票-- ...
随机推荐
- sitecore系统教程之内容创作入门
在Sitecore中,有两种编辑工具,您可以在其中创建和编辑网站上的内容: 内容编辑器 - 专为熟悉Sitecore及其包含的功能的经验丰富的内容作者而设计的应用程序. 体验编辑器 - 一种直观的编辑 ...
- urllib2 post请求方式,带cookie,添加请求头
#encoding = utf-8 import urllib2import urllib url = 'http://httpbin.org/post'data={"name": ...
- Linux基础命令---忽略挂起信号nohup
nohup nohup可以使程序能够忽略挂起信号,继续运行.用户退出时会挂载,而nohup可以保证用户退出后程序继续运行.如果标准输入是终端,请将其从/dev/null重定向.如果标准输出是终端,则将 ...
- android textview字体加粗 Android studio最新水平居中和垂直居中
android textview字体加粗 Android studio最新水平居中和垂直居中 Android中字体加粗在xml文件中使用android:textStyle=”bold”但是不能将中文设 ...
- java.lang.RuntimeException: can not run elasticsearch as root
忘写了一个错误: [o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main] org.el ...
- CentOS7 安装 mysql8
本文主要从以下几个方面对自己在centos7 下安装mysql8过程做如下总结: CentOS7 安装mysql8 步骤: window下的Navicat 连接MySql8: 涉及到的Linux命令 ...
- webpack系统配置
简言之,webpack 是一个模块打包器 (module bundler),能够将任何资源如 JavaScript 文件.CSS 文件.图片等打包成一个或少数文件. 为什么要用Webpack? 首先, ...
- 判断是移动端还是PC端
// 判断是移动端还是PC端 $http_user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USE ...
- Jmeter压力测试和接口测试
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要安 ...
- C#简单线程
一.实例1 static void Main(string [] args) { Console.WriteLine("开始线程"); startFunc(); Console.W ...