题意: 用一个线性的箱子放黄金, 金条可以露出来一般而不掉出来。问给定金条长度,价值,箱子长度,问最多能放多少金条。
思路: 如果没有可以露出来的限制,那么为裸的01背包问题。现在多了这个限制,是在状态的定义与转移的时候多了几种情况。
状态:dp[i][0/1/2]表示背包容量为i时, [0]表示没有露出来的金条的情况, [1]表示有一边露出来,[2]表示两边都有露出来的ans
决策:
dp[i][0] 只能由 dp[i-w[i]][0]转移
dp[i][1] 可以由 dp[i-w[i]][1]和dp[i-w[i]/2][0]转移
dp[i][2] 可以由 dp[i-w[i]][2]和dp[i-w[i]/2][0/1]转移
边界条件:dp[0][0/1/2] = 0

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<cstdlib>
#include<list>
#include<stack>
#include<cmath>
using namespace std;
typedef long long LL;
LL dp[4015][3];
LL w[2005], v[2005];
int main()
{ios::sync_with_stdio(false);#ifndef ONLINE_JUDGEfreopen("input.txt", "r", stdin);#endif // ONLINE_JUDGEint t;cin >> t;int Case = 1;while(t--){int n, m;cin >> n >> m;m*=2;LL mm = 0;for(int i = 0; i < n; ++i){cin >> w[i] >> v[i];w[i]*=2;mm = max(mm, v[i]);}memset(dp, 0, sizeof(dp));for(int i = 0; i < n; ++i){for(int j = m; j >= w[i]/2; --j){for(int k=0;k<=2;k++){if(k>=1)dp[j][k] = max(dp[j-w[i]/2][k-1]+v[i], dp[j][k]);if(j>=w[i]){dp[j][k] = max(dp[j-w[i]][k]+v[i], dp[j][k]);}mm = max(dp[j][k], mm);}}}cout << "Case #" << Case++ << ": ";cout << mm << endl;}return 0;
}

HDU5543 Pick The Sticks [背包dp变形]相关推荐

  1. HDU5616 Jam's balance[背包dp变形]

    题意:给定n个砝码,q次询问是否能够称重量为w的物体,使得天平平衡. 思路: 一开始没有考虑天平两边都能放砝码,即物体可以和砝码同时放到一边,所以误以为是裸背包问题. 问题可以用dp[i][j]表示状 ...

  2. (背包dp) 背包N讲

    文章目录 前言 相关练习题 模板题 01背包 完全背包 多重背包 小数据范围 (可朴素暴力) 中等数据范围 (二进制优化) 大数据范围 (单调队列优化) 混合背包 二维费用背包 分组背包 有依赖的背包 ...

  3. 牛客寒假训练营4-爆炸的符卡洋洋洒洒 (dp变形)

    题意: 链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 小红正在研究如何把符卡组合出尽可能大威力的组合魔法. 小红共有 n 种符卡可以选择,每种符卡最多只能选择一次,每个符卡的魔力消耗为 ...

  4. 暑假N天乐 —— 01背包及变形

    暑假集训的第一天 第二天了. 决定还是先把基础巩固一下好了,万一后面训练赛出事故更尴尬. 所以今天的主题是 -- 01背包及变形 动态规划概念 动态规划(Dynamic programming,DP) ...

  5. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  6. 背包dp的核心思想(动态规划)

    背包dp 突然发现我一直没有真正理解背包,真正的背包应该是用空间换时间的一种dp方法,本质上就是n个物品选或不选,理论上有2n2^n2n种可能结果,但是背包利用的就是值域很小这一特点来重叠子结构,所以 ...

  7. Codeforces 864E Fire(背包DP)

    背包DP,决策的时候记一下 jc[i][j]=1 表示第i个物品容量为j的时候要选,输出方案的时候倒推就好了 #include<iostream> #include<cstdlib& ...

  8. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp

    题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...

  9. HDU 1011 Starship Troopers 树形+背包dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1011   题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...

最新文章

  1. PHP TP5框架 安装运行 Warning: require(E:\phpstudy_pro\WWW\TP5\tp5\public/../thinkphp/base.php): failed to
  2. 腾讯张正友:攻克可进化机器人,6个研究趋势与7大技术突破点
  3. golang中slice切片的修改操作
  4. python3远程连接MySQL
  5. 64 大小_电脑系统32位和64位有什么区别
  6. Hello World, S/4HANA for Customer Management 1.0 1
  7. 在 .NET 中加载椭圆曲线 (EC) 密钥
  8. 简单性与鲁棒性–在锁定文件处理中展示
  9. [十二省联考2019]皮配
  10. jieba分词提取小说人名
  11. Visual Studio 宏
  12. shiro自定义过滤器
  13. python今日内容_python笔记15
  14. python中文转拼音不用第三方库_又一个奇葩要求,Python是如何将“中文”转“拼音”的?...
  15. C++中数组定义及初始化
  16. python元祖组成字典_Python之旅第四天(列表、元祖、字典和习题)
  17. htop的VIRT是什么
  18. 服务器修改文件后撮,xp系统的dns服务器修改办法.doc
  19. unity3D: visual Studio 调试 unity
  20. 计算机主机ppt课件,怎么用电脑制作ppt课件

热门文章

  1. 第一学期-期中考试-考试总结
  2. vue扫码下载APP安装包
  3. Shell扩展正则表达式练习1——电话号码过滤
  4. 深度学习入门,计算机视觉,推荐系统,自然语言处理理论框架以及学习资料【附知识图谱与链接】
  5. 代码演示Mybatis-Generator 扩展自定义生成
  6. 将mqm用户的环境变量写入配置文件
  7. llinux c 常用指令学习
  8. 追寻凌云梦——对话阿里云总裁王坚
  9. 简单了解认识通信过程中的物理层
  10. 五次面试,程序员的悲催轮回