「CF744C」Hongcow Buys a Deck of Cards「状压 DP」
题意
你有\(n\)个物品,物品和硬币有\(A\),\(B\)两种类型,假设你有\(M\)个\(A\)物品和\(N\)个\(B\)物品
每一轮你可以选择获得\(A, B\)硬币各\(1\)个,或者(硬币足够)花\(\max(a_i - M, 0)\)个\(A\),\(\max(b_i - N, 0)\)个\(B\)买\(i\)这个物品
问买到所有物品最少要多少轮
题解
巧妙的\(dp\),考虑间接设计状态
\(f[S][A] = B\)表示\(S\)这个集合买过了,\(A\)类花\(\sum a_i-A\)个硬币, \(B\)类花\(\sum b_i - B\)个硬币,这里的\(B\)取最大值
考虑可以先凑硬币,所有物品都最后买,统计一下答案
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 16;
const int M = N * N + 5;
int n, suma, sumb, t[N], lg[1 << N], a[N], b[N];
int cnta[1 << N], cntb[1 << N], f[1 << N][M];
int main() {
scanf("%d", &n); char s[10];
for(int i = 0; i < n; i ++) {
scanf("%s%d%d", s, a + i, b + i);
if(*s == 'R') t[i] = 0;
if(*s == 'B') t[i] = 1;
suma += a[i]; sumb += b[i];
}
for(int i = 0; i < n; i ++) {
lg[1 << i] = i;
}
for(int i = 1; i < (1 << n); i ++) {
cnta[i] = cnta[i & (i - 1)] + (t[lg[i & (-i)]] == 0);
cntb[i] = cntb[i & (i - 1)] + (t[lg[i & (-i)]] == 1);
}
memset(f, -1, sizeof f); f[0][0] = 0;
for(int S = 0; S < (1 << n); S ++) {
for(int j = 0; j <= 120; j ++) if(~ f[S][j]) {
for(int i = 0; i < n; i ++) if(!(S >> i & 1)) {
int &dp = f[S | (1 << i)][j + min(a[i], cnta[S])];
dp = max(dp, f[S][j] + min(b[i], cntb[S]));
}
}
}
int ans = 2e9;
for(int i = 0; i <= 120; i ++) {
if(~ f[(1 << n) - 1][i]) {
ans = min(ans, max(suma - i, sumb - f[(1 << n) - 1][i]));
}
}
printf("%d\n", ans + n);
return 0;
}
「CF744C」Hongcow Buys a Deck of Cards「状压 DP」的更多相关文章
- Codeforces 744C. Hongcow Buys a Deck of Cards(状压DP)
这题的难点在于状态的设计 首先显然是个状压,需要一维表示卡的状态,另一维如果设计成天数,难以知道当前的钱数,没法确定是否能够购买新的卡,如果设计成钱数,会发现状态数过多,空间与时间都无法承受.但是可以 ...
- codeforces 744C Hongcow Buys a Deck of Cards
C. Hongcow Buys a Deck of Cards time limit per test 2 seconds memory limit per test 256 megabytes in ...
- Codeforces 744C Hongcow Buys a Deck of Cards 状压dp (看题解)
Hongcow Buys a Deck of Cards 啊啊啊, 为什么我连这种垃圾dp都写不出来.. 不是应该10分钟就该秒掉的题吗.. 从dp想到暴力然后gg, 没有想到把省下的红色开成一维. ...
- Codeforces Round #385 (Div. 1) C. Hongcow Buys a Deck of Cards
地址:http://codeforces.com/problemset/problem/744/C 题目: C. Hongcow Buys a Deck of Cards time limit per ...
- 「状压DP」「暴力搜索」排列perm
「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整 ...
- Hongcow Buys a Deck of Cards CodeForces - 744C (状压)
大意: n个红黑卡, 每天可以选择领取一块红币一块黑币, 或者买一张卡, 第$i$张卡的花费红币数$max(r_i-A,0)$, 花费黑币数$max(b_i-B,0)$, A为当前红卡数, B为当前黑 ...
- Codeforces 745E Hongcow Buys a Deck of Cards 状压DP / 模拟退火
题意:现在有n张卡片(n <= 16), 每一轮你可以执行两种操作中的一种.1:获得一张红色令牌和一张蓝色令牌.2:购买一张卡片(如果可以买的话),购买的时候蓝色卡片可以充当蓝色令牌,红色同理, ...
- ☆ [POJ2411] Mondriaan's Dream 「状压DP」
传送门 >Here< 题意:用1*2的砖块铺满n*m的地板有几种方案 思路分析 状压经典题! 我们以$f[i][j]$作为状态,表示第i行之前全部填完并且第i行状态为j(状压)时的方案数. ...
- 「BZOJ 5010」「FJOI 2017」矩阵填数「状压DP」
题意 你有一个\(h\times w\)的棋盘,你需要在每个格子里填\([1, m]\)中的某个整数,且满足\(n\)个矩形限制:矩形的最大值为某定值.求方案数\(\bmod 10^9+7\) \(h ...
随机推荐
- django使用bootstrap前端框架
一.下载bootstrap相关文件,放在项目目录中.在blog 应用中新建static目录,bootstrap文件放在此目录下. bootstrap下载网址:http://v3.bootcss.com ...
- Java企业微信开发_03_自定义菜单
一.本节要点 1.菜单相关实体类的封装 参考官方文档中的请求包的内容,对菜单相关实体类进行封装. 这里需要格外注意的是,企业微信中请求包的数据是Json字符串格式的,而不是xml格式.关于json序列 ...
- Mybatis异常_01_Invalid bound statement (not found)
异常信息:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.taotao.map ...
- Java---变量与常量
Java中的关键字 Java 语言中有一些具有特殊用途的词被称为关键字.关键字对 Java 的编译器有着特殊的意义,在程序中应用时一定要慎重 Java标识符 标识符就是用于给 Java 程序中变量.类 ...
- C++STL(vector,map,set,list,bitset,deque)成员函数整理
补充: vector 删除指定元素: vec.erase(remove(vec.begin(), vec.end(), val), vec.end());remove()返回的是删 ...
- 2_flyweight, 轻量化模式
### instanced rendering. send shared data to gpu just once mesh, texture, leaves push every instance ...
- php断点续传
http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
- Operating System-Kickoff:什么是操作系统&&操作系统的核心概念
接下来会写一系列Operating System(操作系统)的文章,今天先开个头.本文主要内容: 什么是操作系统 操作系统的核心概念 程序=数据结构+算法 一.什么是操作系统 1.1 操作系统是对硬件 ...
- bzoj 2178 圆的面积并 —— 辛普森积分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2178 先看到这篇博客:https://www.cnblogs.com/heisenberg- ...
- Azure Public IP DNS域名
在某些环境下,PIP是Azure上的一种比较好的解决方案处理一些特殊的环境.比如大量的端口需要打开.向外部的访问非常多等等. 但目前,Azure的Reserved IP address不用应用到PIP ...