题目链接:

http://codeforces.com/gym/101161/attachments

题意:

总共有n瓶药可供选择

每瓶药可以增加$e_i$点体力,和$p_i$点毒性

每分钟消耗1点毒性,毒性不能大于99,体力不能小于0大于100

击败一只怪物消耗$k$点体力,花费$m$分钟

计算不最大击败怪物的数量

数据范围:

$1\leq n\leq 8$

分析:

定义$dp[i][j][k]$为药物状态为$i$,体力为$j$,毒性为$k$的最大击败数

初始化$dp[0][100][0]=0$

对于每个$dp[i][j][k]$,可以选择击败一只怪物不喝药,或者在$i$状态下,击败一只怪物并且喝一瓶没有喝过的药

ac代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
const int maxn = 1e5+100;
int dp[(1<<8)+7][101][101];
int e[9],p[9],k,m;
int main()
{
int T,d,m,n;
scanf("%d",&T);
while(T--){
scanf("%d %d",&d,&m);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&e[i]);
for(int i=1;i<=n;i++)
scanf("%d",&p[i]);
int len=(1<<n);
for(int i=0;i<len;i++)
for(int j=0;j<=100;j++)
for(int k=0;k<=100;k++)
dp[i][j][k]=-1e9;
dp[0][100][0]=0;
for(int i=0;i<len;i++){
for(int j=100;j>=d+1;j--){
for(int k=0;k<=99;k++){
dp[i][j-d][max(0,k-m)]=
max(dp[i][j][k]+1,dp[i][j-d][max(0,k-m)]);
for(int f=1;f<=n;f++){
if(((1<<(f-1))&i)==0){
if(max(0,k-m)+p[f]<=99)
dp[i+(1<<(f-1))][min(100,j-d+e[f])][max(0,k-m)+p[f]]
=max(dp[i+(1<<(f-1))][min(100,j-d+e[f])][max(0,k-m)+p[f]],
dp[i][j][k]+1);
}
}
}
}
}
int ans=0;
for(int i=0;i<len;i++)
for(int j=0;j<=100;j++)
for(int k=0;k<=99;k++)
ans=max(ans,dp[i][j][k]);
printf("%d\n",ans);
}
return 0;
}

  

codeforces gym #101161H - Witcher Potion(状压DP)的更多相关文章

  1. Codeforces Round #363 LRU(概率 状压DP)

    状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解. #incl ...

  2. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  3. Codeforces 429C Guess the Tree(状压DP+贪心)

    吐槽:这道题真心坑...做了一整天,我太蒻了... 题意 构造一棵 $ n $ 个节点的树,要求满足以下条件: 每个非叶子节点至少包含2个儿子: 以节点 $ i $ 为根的子树中必须包含 $ c_i ...

  4. Codeforces 895C Square Subsets(状压DP 或 异或线性基)

    题目链接  Square Subsets 这是白书原题啊 先考虑状压DP的做法 $2$到$70$总共$19$个质数,所以考虑状态压缩. 因为数据范围是$70$,那么我们统计出$2$到$70$的每个数的 ...

  5. 【题解】codeforces 8c Looking for Order 状压dp

    题目描述 Lena喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她想把所有的物品都放回她的手提包.但是,这里有一点问题:她一次最多只能拿两 ...

  6. Codeforces 895C Square Subsets:状压dp【组合数结论】

    题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= ...

  7. CodeForces 599E Sandy and Nuts 状压DP

    题意: 有一棵\(n(1 \leq n \leq 13)\)个节点的树,节点的标号为\(1 \sim n\),它的根节点是\(1\). 现在已知它的\(m(0 \leq m < n)\)条边,和 ...

  8. codeforces 580D Kefa and Dishes(状压dp)

    题意:给定n个菜,每个菜都有一个价值,给定k个规则,每个规则描述吃菜的顺序:i j w,按照先吃i接着吃j,可以多增加w的价值.问如果吃m个菜,最大价值是多大.其中n<=18 思路:一看n这么小 ...

  9. Codeforces 342D Xenia and Dominoes 状压dp

    码就完事了. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define ...

随机推荐

  1. Python利用PIL将数值矩阵转化为图像

    要求:输入一个n*n的矩阵,矩阵包括从-1到1的浮点数,将其转化为可视化图像 调库 from PIL import Image import numpy as np import math 载入图像, ...

  2. 1-MySQL DBA笔记-理解MySQL

    第一部分 入门篇 本篇首先介绍MySQL的应用领域.基础架构和版本,然后介绍MySQL的基础知识,如查询的执行过程.权限机制.连接.存储引擎,最后阐述一些基础概念. 第1章 理解MySQL 本章将介绍 ...

  3. 基于C#实现与新大陆扫码枪通信

    随着工业互联的发展,扫码枪在很多场合都有所应用,超市.商场以及一些智能工厂.今天主要讲如何通过C#实现与新大陆扫码枪(OY10)进行通信,对于扫码枪的配置,这里就不多说了,结合说明书就可以实现.这里值 ...

  4. c++11 常量表达式

    c++11 常量表达式 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #inclu ...

  5. 初学java2 认识面向对象 以及运算符 输入输出

    面向对象 面向对象是一种程序设计思路,在设计一个程序时不需要考虑内部如何实现,只需要想他要实现什么功能 就像在餐馆点菜一样,你不需要知道他应该怎么做,你只需要决定你要吃什么 面向对象三大特征 继承 封 ...

  6. vue runtime报错问题

    Webpack中导入vue和普通网页中导入vue的区别1. 普通网页导入vue方式 <script></script> 2. Webpack导入vue方式 Import Vue ...

  7. canvas之五角星的绘制

    <html> <head> <meta charset=utf-8> <title>绘制简单图形线及矩形</title> <style ...

  8. JAVA 1.6锁状态转换

    JVM 学不好 并发就学不好 面试问题 Object 有哪些方法 syn实现过程 wait notify 为什么要设计到Object上而不是接口?虽然可以 但是面向对象的思想 子类 object.wa ...

  9. mock.js学习之路一(Vue中使用)

    1.安装mockjs 2.配置mockjs在开发环境中启用,生产环境中禁用 3.创建mock文件夹,以及mock数据文件 4.在main.js中引入与否 5.页面获取数据 testMock(){ th ...

  10. briup_JDBC

    连接mysql和orcle的驱动jar包 链接:https://pan.baidu.com/s/1M5RZY62UOZbfFGIwDQK6SQ  提取码:cu6e 复制这段内容后打开百度网盘手机App ...