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并没有能够买到很好的火车票-- ...
随机推荐
- windows批处理定时关机
2017-04-11 windows bat文件可以简化很多cmd命令,为我们提供很多方便.今天介绍定时关机的批处理代码实现: 我们知道windows下的定时关机可以通过shutdown命令实现,如果 ...
- uva 10369 Arctic Network
题意: 有许多基地,每个基地都有两种收发信号的方式,一种是通过无线电收发机,另一种是通过卫星.两个基地之间可以通过卫星交流不管它们相距多远:但是通过无线电交流,就要求它们的距离不超过D.为了方便布置, ...
- Eclipse中tomcat更改部署路径 deply path
默认是部署在项目元数据文件夹.metadata文件夹下,需要更改到tomcat/webapps目录下 Eclipse中tomcat service设置 选择window ----show view-- ...
- base_review
简述Python的字符串驻留机制. - 字符串驻留是一种仅保存一份相同且不可变字符串的方法. - 原理 - 系统维护interned字典,记录已被驻留的字符串对象. - 当字符串对象a需要驻留时,先在 ...
- tensorflow学习6
g_w1 = tf.get_variable('g_w1', [z_dim, 3136], dtype=tf.float32, initializer=tf.truncated_normal_init ...
- Chrome浏览器相关细节整理
一.上传文件卡死 可能时由于输入法的原因导致上传文件浏览器卡死.将输入法改为英文模式再操作上传文件就不会卡死了.
- android使用ARouter跳转activity(阿里巴巴开源的)
android使用ARouter跳转activity(阿里巴巴开源的) 使用ARouter方式,点击按钮跳转到其他activitypublic void buyOrSell(String str){ ...
- 一位前辈的博客,收获颇丰,包括Android、Java、linux、前端、大数据、网络安全等等
https://www.cnblogs.com/lr393993507/ 魔流剑
- @Entity 和 @Table
Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库.这些普通Java对象被称作Entity Bean.除了是用Java Persis ...
- 怎样从外网访问内网Redis数据库?
本地安装了一个Redis数据库,只能在局域网内访问到,怎样从外网也能访问到本地的Redis数据库呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Redis数据库 默认安装的Redis ...