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并没有能够买到很好的火车票-- ...
随机推荐
- Shader2.0常用语义
POSITION: 获取模型顶点的信息.NORMAL: 获取法线信息TEXCOORD(n): 高精度的从顶点传递信息到片段着色器COLOR: 表示低精度从顶点传递信息到片段着色器 ...
- [openjudge-动态规划]怪盗基德的滑翔翼
题目描述 描述 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯.而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼. 有一天 ...
- ecplise问题总结
ecplise 1.ecplise在运行的时候出现错误 Unable to execute dex: GC overhead limit exceeded GC overhead limit exce ...
- double,失去精度
double,失去精度: amount.doubleValue() * 使用 BigDecimal: public static double add(double d1,double d2){ Bi ...
- python 正则re.search
re.search 扫描整个字符串并返回第一个成功的匹配. 上码: import re line = "Cats are smarter than dogs"; searchObj ...
- MapReduce的map个数调节 与 Hadoop的FileInputFormat的任务切分原理
在对日志等大表数据进行处理的时候需要人为地设置任务的map数,防止因map数过小导致集群资源被耗光.可根据大表的数据量大小设置每个split的大小. 例如设置每个split为500M: set map ...
- Chrome浏览器相关细节整理
一.上传文件卡死 可能时由于输入法的原因导致上传文件浏览器卡死.将输入法改为英文模式再操作上传文件就不会卡死了.
- 转:判断Caps Lock键是否打开,如果打开则关闭
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- js获取浏览器类型和版本信息
bro () { let broName = 'Runing' let strStart = 0 let strStop = 0 let temp = '' let userAgent = windo ...
- The Little Prince-12/16
The Little Prince-12/16 今天四六级考完了呢,布吉岛大家考的怎么样,会有好多好多奇葩翻译吧,哈哈哈! 突然放出一条16年的笑笑汪~~~今年的也应该会很快出炉了,段子手们准备好!! ...