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 CMS中创建模板
如何在Sitecore CMS中创建模板. 在/sitecore/templates选择应创建模板的文件夹中. 注意:在多站点项目中,通常会在模板所属的网站名称的/sitecore/templates ...
- sitecore系列教程之目标功能有什么新意?
由于SItecore 8中有很多令人兴奋的东西,我选择专注于体验平台的特定领域,这篇文章的主题是目标. 1.客户智能选项 目标项目(/ sitecore / system / Marketing C ...
- Spark学习之路 (十一)SparkCore的调优之Spark内存模型
摘抄自:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/ind ...
- 富文本编辑器kindeditor插件
官网:http://kindeditor.net/doc.php 步骤
- curl 命令简介
curl命令用于在命令行中发送HTTP请求: curl -i -H 'content-type: application/json' -X POST -d '{"name":&qu ...
- Spring 知识点提炼-转
https://www.cnblogs.com/baizhanshi/p/7717563.html 1. Spring框架的作用 轻量:Spring是轻量级的,基本的版本大小为2MB 控制反转:Spr ...
- EF使用sql语句
https://www.cnblogs.com/chenwolong/p/SqlQuery.html https://blog.csdn.net/zdhlwt2008/article/details/ ...
- 第一周java测验感想
在正式开学的第一周,建民老师就给我们来了一个下马威.我本身的编程基础比较差,不知道怎么去想,怎么去一步步的去完成这么一个工程.所以我在星期四的下午十分的痛苦…因为不知道怎么搞嘛.尽管在暑假的时候看了 ...
- Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
def logout(request): request.session.flush() return HttpResponseRedirect(request.META.get('HTTP_REFE ...
- Docker学习笔记之docker-save vs docker-export vs docker-commit
之前对这几个command是忘了记,记了混-所以写下笔记以巩固之. 1.docker save docker save -h Usage: docker save [OPTIONS] IMAGE [I ...