「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 ...
随机推荐
- BZOJ 3890 [Usaco2015 Jan]Meeting Time:拓扑图dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3890 题意: 给你一个有向图,n个点(n <= 100),m条边. 且所有的边都是从 ...
- thinkphp3.2新部署是错
下载好thinkphp3.2,使用M或者D方法是,报FILE: tp\ThinkPHP\Library\Think\Db.class.php LINE: 42 可能的错误是,配置文件中没有配置数据库连 ...
- 在Win8.1系统下如何安装运行SQL Server 2005
按正常情况,在Win8/Win8.1系统下安装微软的SQL Server 2005套件会存在兼容问题,即使安装完,最后的结果就是导致其服务项无法正常启动. 如果用户创建使用的项目非要按照SQL Ser ...
- cpu满问题分析
功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 做为开发人员,肯定会遇到这类问题,介绍一下分析CPU 1 ...
- python-多线程(一)
一.Python中的线程使用: Python中使用线程有两种方式:函数或者用类来包装线程对象. 1. 函数式:调用thread模块中的start_new_thread()函数来产生新线程.如下例: ...
- Maven 将jar导入本地maven仓库
目录 环境变量配置maven 执行一下命令即可 诚邀访问我的个人博客:我在马路边 更好的阅读体验点击查看原文:Maven将jar倒入本地maven仓库 原创博客,转载请注明出处 @ 在Java项目开发 ...
- centos下升级mysql5.5.47到5.7.14操作过程
一. 查看已安装Mysql基础信息通过mysql –V 查看下mysql版本可以通过命令find / -name mysql 得到下面信息 1.安装目录[root@jjxnhd-192-10 mysq ...
- redis安装及启动及设置
1. 安装 1.1 下载解压包,直接解压到任意路径下即可 windows下载地址:ttps://github.com/MSOpenTech/redis/releases 2.启动 2.1 启动要先开启 ...
- poj 2105 IP Address(水题)
一.Description Suppose you are reading byte streams from any device, representing IP addresses. Your ...
- poj 1658 Eva's Problem(水题)
一.Description Eva的家庭作业里有很多数列填空练习.填空练习的要求是:已知数列的前四项,填出第五项.因为已经知道这些数列只可能是等差或等比数列,她决定写一个程序来完成这些练习. Inpu ...