[hihocoder1044]状态压缩一
问题简介
算法详解
- f[i][j] = 0 if cnt[j] > Q
- f[i][j] = max(f[i-1][j>>1+1<<(M-1)],f[i-1][j>>1])+weight[j]; if j&1==1
- f[i][j] = max(f[i-1][j>>1+1<<(M-1)],f[i-1][j>>1]); if j&1==0
其中cnt[j]表示j中有多少个1。
代码
#include <iostream>using namespace std;void build_cnt(int *cnt,int m){int len = 1<<m;for (int i = 0;i < len;++i){cnt[i] = 0;for (int j = 0;j < m;++j)cnt[i] += ((i>>j)&1);}
}inline int mmax(int a,int b){return (a>b)?a:b;
}int main()
{int n,m,q;int weight[1002] = {0};cin >> n >> m >> q;for (int i = 0;i < n;++i)cin >> weight[i];int maxw[2][2050] = {0};int cnt[2050];bool flag = true;int len = 1<<(m);build_cnt(cnt,m);// cout << "cnt: ";
// for (int i = 0;i < len;++i)
// cout << cnt[i] << ' ';
// cout << endl;for (int i = 0;i < n;++i){for (int j = 0;j < len;++j){if (cnt[j] > q)maxw[flag][j] = 0;else {if (j&1){maxw[flag][j] = mmax(maxw[!flag][(j>>1)+(1<<(m-1))],maxw[!flag][(j>>1)])+weight[i];}else {maxw[flag][j] = mmax(maxw[!flag][(j>>1)+(1<<(m-1))],maxw[!flag][(j>>1)]);}}}
//
// cout << i << ": ";
// for (int j = 0;j < len;++j)
// cout << maxw[flag][j] << ' ';
// cout << endl;flag = !flag;}int result = 0;for (int i = 0;i < len;++i){if (result < maxw[!flag][i])result = maxw[!flag][i];}cout << result << endl;return 0;
}
[hihocoder1044]状态压缩一相关推荐
- pat 食物链(状态压缩求哈密顿回路)
状态压缩求哈密顿回路 #include<bits/stdc++.h> using namespace std; bool dp[23][1<<21]; char s[22][2 ...
- POJ-1753 Flip Game 枚举 状态压缩
刚开始做这题时总是在想应该用何种的策略来进行翻装,最后还是没有想出来--- 这题过的代码的思路是用在考虑到每个点被翻装的次数只有0次或者是1次,所以对于16个点就只有2^16中请况了.再运用位运算将状 ...
- 状压DP Hiho-1044 状态压缩
状态压缩 [HihoCoder - 1044] 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市--那座城市即将举行美食节! 但是不幸的是,小 ...
- POJ-1185 炮兵阵地 动态规划+状态压缩
由于递推的时候依赖于三个连续层的关系.一开始想着直接三重for循环,但是这里有个问题就是上一层的0位置上包括着上上层是0和1两种可能,而后者又对当前行有约束,因此该方法不行.当然有一个办法就是增加状态 ...
- 树上启动式合并问题 ---- D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths [状态压缩+树上启发式合并]
题目链接 题目大意: 一棵根为1 的树,每条边上有一个字符(a−va−va−v共22种). 一条简单路径被称为Dokhtar−kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串. 求每个子树 ...
- 点分治问题 ----------- HDU 5977 or 2016年大连ICPC [点分治+状态压缩]
题目链接 题目大意: 就是给你一颗树,树上有各种权值,权值只有K种k∈[1,10]K种k\in[1,10]K种k∈[1,10],问你有多少路径覆盖了这KKK种权值,n∈[1,5e4]n\in[1,5e ...
- 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...
- 解题报告(一)D、(CROC 2016 - Final Round C)Binary Table(矩阵 + 状态压缩 + FWT)(3.5)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 【动态规划】状态压缩动态规划
整理的算法模板合集: ACM模板 目录 一.集合类状态压缩动态规划 A. AcWing 91. 最短Hamilton路径 B.AcWing 524. 愤怒的小鸟 二.连通类(棋盘类)状态压缩动态规划 ...
最新文章
- 0x00000000指令引用的内存不能为written_jvm的内存结构
- opencv cuda使用笔记
- APP元素获取信息操作API
- c++从字符串中提取数字求和_【函数应用】单元格文本内提取数字并求和
- 创建win32 dll
- java 仿qq登录界面7.1_安卓开发学习笔记(七):仿写腾讯QQ登录注册界面
- Flutter学习之纵向布局
- javascript在asp.net中运用
- Java和web前端,IT新人该如何选择?
- 留言板删除功能mysql_用PHP写留言板代码时怎样才能实现删除和修改留言的啊?代码是怎样的?...
- 关于dotnetbar控件
- 小川用的Ubuntu软件和库
- 陈越微博c语言自学攻略,数据结构自学攻略
- 【编程题】【Scratch四级】2021.09 小猫钓鱼
- 有什么好用的表单工具?
- [Power Query] 数据类型转换
- 如何查看内核版本和ubuntu版本
- 大数据三个特点的理解
- (时间篇)关于时间的思考
- 因计算机丢失d3dx9-30,win10 64位纯净版运行仙剑5提示缺少d3dx9_30.dll的修复方法
热门文章
- elementui 分页与tabe数据绑定
- 【华为OD统一考试B卷 | 200分】宜居星球改造计划(Java JavaScript Python)
- 涡轮发动机图测试线2010开关测试机SW辊子输送机用抓手SW双头精雕机IGSFPC折弯设备、FPC软板折弯机SWZ4直流电机_三维图Z4-112-4-1_5.5KW_160-1抛光机三维图
- 为什么相爱的人不能在一起?
- 半路出家自学Python,几个月的努力,终于拿到一份月薪上万offer
- 内存管理<原理篇>(五、页表和快表)
- odoo的many2many和one2many字段给默认值
- Flask web开发实战之基础篇 初识Flask
- webp格式一键转图片小工具一拖即转格式可选路径可选(源码)
- 神经网络中的概率分布函数