uestc oj 1218 Pick The Sticks (01背包变形)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1218
给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可以伸一半的长度在容器外,求最大价值量
01背包是取和不取。那这里我们可以把容器长度 l x 2,筷子长度 x 2,就变成了最多两个筷子取一次(伸一半在外面),其余的要么取两次,要么不取。
普通01背包,一维dp[i]表示消耗体积i所得到的最大的价值。
那么这里dp[i][k]表示消耗体积i并有k(k <= 2)个在外面所得到的最大的价值。
1 //#pragma comment(linker, "/STACK:102400000, 102400000") 2 #include <algorithm> 3 #include <iostream> 4 #include <cstdlib> 5 #include <cstring> 6 #include <cstdio> 7 #include <vector> 8 #include <cmath> 9 #include <ctime> 10 #include <list> 11 #include <set> 12 #include <map> 13 using namespace std; 14 typedef long long LL; 15 typedef pair <int, int> P; 16 const int N = 4e3 + 5; 17 LL dp[N][5]; //dp[i][k]表示使用i体积有k个木板在露在外面的最大价值 18 int w[N]; 19 LL v[N]; 20 21 int main() 22 { 23 int t, n, g; 24 scanf("%d", &t); 25 for(int ca = 1; ca <= t; ++ca) { 26 scanf("%d %d", &n, &g); 27 LL ans = 0; 28 for(int i = 1; i <= n; ++i) { 29 scanf("%d %lld", w + i, v + i); 30 w[i] <<= 1; 31 ans = max(ans, v[i]); 32 } 33 g <<= 1; 34 memset(dp, 0, sizeof(dp)); 35 for(int i = 1; i <= n; ++i) { 36 for(int j = g; j >= w[i]/2; --j) { //一维背包类似,说明下面只能取一次 37 for(int k = 0; k <= 2; ++k) { 38 if(w[i] <= j) //全放在里面 39 dp[j][k] = max(dp[j - w[i]][k] + v[i], dp[j][k]); 40 if(k >= 1) //有一半在外面 41 dp[j][k] = max(dp[j - w[i]/2][k - 1] + v[i], dp[j][k]); 42 } 43 } 44 } 45 for(int i = 0; i <= 2; ++i) { 46 ans = max(ans, dp[g][i]); 47 } 48 printf("Case #%d: %lld\n", ca, ans); 49 } 50 return 0; 51 }
转载于:https://www.cnblogs.com/Recoder/p/5901730.html
uestc oj 1218 Pick The Sticks (01背包变形)相关推荐
- codeforce Gym 101102A Coins (01背包变形)
01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...
- P1734 最大约数和 01背包变形
传送门 思路:01背包变形题.将i看成重量,i的因子看成价值即可.背包自然是s. /** * From: * Qingdao Agricultural University * Created by ...
- DP(01背包) UESTC 1218 Pick The Sticks (15CCPC C)
题目传送门 题意:长度为L的金条,将n根金棍尽可能放上去,要求重心在L上,使得价值最大,最多有两条可以长度折半的放上去. 分析:首先长度可能为奇数,先*2.然后除了两条特殊的金棍就是01背包,所以dp ...
- UVA 12563 Jin Ge Jin Qu hao 01背包变形
基本的01背包,更新的时候保持背包里每一个元素的num最大然后time尽量长 CSDN也支持makedown了试一下 12563 Jin Ge Jin Qu hao (If you smiled wh ...
- HDU 2546 饭卡 01背包变形
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 3466 01背包变形
给出物品数量N和总钱数M 对于N个物品.每一个物品有其花费p[i], 特殊值q[i],价值v[i] q[i] 表示当手中剩余的钱数大于q[i]时,才干够买这个物品 首先对N个物品进行 q-p的排序,表 ...
- poj 2063 Investment(01背包变形)
http://poj.org/gotoproblem?pid=2063 (1)上限 m 一直上升的 n 次01背包问题,比一般的01背包多了一重循环: (2)本题出现了各种错误:1)刚开始,没注意 m ...
- hdu 2184 01背包变形
转自:http://blog.csdn.net/liuqiyao_01/article/details/8753686 题意:这是又是一道01背包的变体,题目要求选出一些牛,使smartness和fu ...
- #1353 : 满减优惠(01背包变形)
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
最新文章
- 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
- 利用https访问站点(基于linux系统)
- webpack4.x配置
- 微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的...
- Educational Codeforces Round 11C. Hard Process two pointer
- 进程守护系统,你懂吗?
- C#相关基础知识点总结+基础代码
- Dubbo(九)之注解配置
- mt4 python神经网络_迈达克软件公司承认Python运算对量化交易的重要性----将Python与Metatrader 5集成一体...
- Ubuntu源码安装gcc-10
- api wke_好用的wke浏览器代码,兼容chrome
- 安装FlexPro和设置FlexPro许可证管理器
- C++中局部和全局变量的地址分配
- 经典书籍《打开量化投资的黑箱》阅读心得
- 高精度地图数据的结构
- Source Generator实战
- 使用canvas给页面添加文字水印
- I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之u-boot移植
- 精通正则表达式学习记录 第二章 入门示例扩展
- python 图片中的表格识别
热门文章
- 如果你对web前端学习感到迷茫的话请看完本文
- 比较ipv6有状态与无状态地址分配工作特点_IPv6环境获取IPV6地址,无状态地址分配,一分钟了解下...
- ReactNative入门之android与rn初始化参数的传递
- FPGA学习笔记---二进制码、独热码、格雷码分析对比
- 面向对象设计——七大原则
- DSB2017第一名论文理解: 3D Deep Leaky Noisy-or Network(三)
- 图像算法四:【图像增强--频率域】傅里叶变换、快速傅里叶变换、频域滤波、频域低通滤波、频域高通滤波
- python与机器学习(二)Numpy / Pandas /矩阵相乘速度对比
- 查看tomcat管理信息
- 多线程join方法解析