HDU3496    
已空间优化
    疑惑点在 dp[时间][看电影数量]的初始化问题上面

dp[0][0]=0。。。。是吧
    dp[0][i]=-inf,,,,,,,这个-inf一定要足够大,题目中的数据是输出的最大价值是<2^31 LL 在dp[0][i]更新的时候,最后是dp[0][i]+总和val,那这儿的-inf肯定是要足够足够大 最后才保证dp[0][i]在更新的时候,选取最大值时才取不到这个不合理的值

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
#define X 1005
using namespace std;int dp[X][X];
int main()
{int t;cin>>t;while(t--){int N,M,L;int w[X],v[X];//L分钟看动画片scanf("%d%d%d",&N,&M,&L);for(int i=0;i<N;++i){scanf("%d%d",&w[i],&v[i]);}for(int i=0;i<=L;++i)for(int j=0;j<=M;++j){if(j==0)dp[i][j]=0;elsedp[i][j]=-1000;}for(int i=0;i<N;++i){for(int j=L;j>=w[i];--j){for(int k=M;k>=1;--k){dp[j][k]=max(dp[j][k],dp[j-w[i]][k-1]+v[i]);}}}if(dp[L][M]<0)dp[L][M]=0;//cout<<dp[L][M]<<endl;}return 0;
}

HDU2184
看出来是一道二维01背包问题
可是怎么确定背包的容量是多少呢?

wa证明我的二维01背包思路是错误姿势
自己写不出来二维01背包实现的,看了网上的题解都是对滚动数组进行分析加上对背包容量的固定偏移量来实现好菜,
滚动数组的正序及逆序:
深入一下滚动数组吧,可以把样例中的负值全部都转化为正直,然后用画表格的方式走一遍滚动数组在实现的时候是怎么样把当前第i件物品更新到dp里面的
(手动实现)这时候每个背包的容量下对应的物品都是放入一次的(空间优化的逆序放入过程),可是存在负值的时候就对应的不同种容量的背包状态是对应得一件物品得多件(自然就不是01背包了)
然后就有了题解中大神理解得对占用负的容量的 一个正序更新dp数组过程(也是自己手动模拟过程,我模拟了一遍)

没有给出背包容量转化为用一定的偏移量来代替没有给出的容量:
因为数据最小负值为-1e5 最大值1e5,那么dp更新范围在2e5之间,所以可以用2e5代表最大的容量,容量最小的基数为1e5,避免出现-1e5的数据使数组访问越界

(原先写得初始化思路:题目使容量尽量大,所以初始化为-inf d[1e5]就代表了01原型背包中的dp[0],((感觉是错误得因为,这道题本身就是含有负值,搞为0得话,就会导致含有一个负值很大得时候他永远不会被选中
((感觉是这样(⊙﹏⊙)
再有的细节就是对于两个数据都是<0肯定不会选中,所以可以直接跳过。
参考

#include <bits/stdc++.h>
#include <iostream>
#define X 10005
#define inf 0x3f3f3f3f
#define PI 3.141592653589793238462643383
#define IO  ios::sync_with_stdio(false),cin.tie(0), cout.tie(0);
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
typedef long long ll;
const ll moad=1e9+7;
const int maxn=1e6+10;
int dp[maxn];
int w[maxn];
int c[maxn];
int vis[maxn];
int Max=2e5;//固定偏移量
int main()
{int n;while(cin>>n){for(int i=0;i<n;++i){cin>>c[i]>>w[i];if(c[i]<=0&&w[i]<=0)--i,n--;}for(int i=0;i<=Max;++i) dp[i]=-inf;dp[100000]=0;for(int i=0;i<n;++i){if(c[i]>=0){for(int j=Max;j>=c[i];--j)if(dp[j-c[i]]>-inf)dp[j]=max(dp[j],dp[j-c[i]]+w[i]);}if(c[i]<0){for(int j=0;j<=Max+c[i];++j)if(dp[j-c[i]]>-inf)dp[j]=max(dp[j],dp[j-c[i]]+w[i]);}}int ans=0;for(int i=1e5;i<=Max;++i)if(dp[i]>0&&(dp[i]+i-Max/2)>ans)ans=dp[i]+i-1e5;cout<<ans<<endl;}return 0;
}

【二维费用的01背包 HDU3496    HDU2184】相关推荐

  1. bailian4102:宠物小精灵之收服(二维费用的01背包)

    dp[i][j]表示扔i个球,皮卡丘损失j体力时所能抓到的最大精灵数.相当于二维费用的01背包.最后按皮卡丘损失体力从小到大扫一下,为了找最优解时皮卡丘剩余体力的最大值. #include <c ...

  2. 【acwing】1022. 宠物小精灵之收服*(二维价值的01背包)

    穿越隧道 三维状态表示 超内存了..哭,思路应该没问题吧. 求大佬指正. #include <bits/stdc++.h> using namespace std; const int N ...

  3. [01背包] 宠物小精灵之收服(01背包+二维费用背包+思维)

    文章目录 0. 前言 1. 01背包裸题 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包裸题 1022. 宠物小精灵之收服 每个精灵仅被收服一次,故可以考虑 01 背包,是典型 ...

  4. 【python】一篇讲透背包问题(01背包 完全背包 多重背包 二维费用背包)

    面对背包问题,有一个很重要的方程式:状态转移方程式 所以每一种背包问题我都会给出状态转移方程式 #01背包 什么是01背包型问题? 先给大家感受一下01背包型问题: 给定n种物品和一背包.物品i的重量 ...

  5. nssl1317-灵魂分流药剂【分组背包,二维费用背包】

    正题 题目大意 一个二维费用的分组背包 NoNoNo解题思路 codecodecode #include<cstdio> #include<algorithm> using n ...

  6. 潜水员 ← 二维费用的背包问题

    [题目来源] https://www.acwing.com/problem/content/1022/ [题目描述] 潜水员为了潜水要使用特殊的装备. 他有一个带2种气体的气缸:一个为氧气,一个为氮气 ...

  7. 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数

    1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi​,价值是 wiw_iwi​.求解将哪些物品装入背包,可使这些物品 ...

  8. 背包九讲之五(二维费用的背包问题)

    http://acm.fafu.edu.cn/problem.php?id=1499 1 /* 2 二维费用的背包问题是指:对于每件物品,具有两种不同的费用, 3 选择这件物品就必须付出这两种代价,每 ...

  9. 动态规划:二维费用背包

    顾名思义,二维费用的背包中的每种物品有两种费用 设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值 那么我们很容易给出状态转移方程,加一维状态即可 f[i][v][u]=m ...

最新文章

  1. limma包分析差异表达基因
  2. 谷歌开源EfficientDet:实现新SOTA,又快又准的目标检测器
  3. 固定DIV不随滚动条滚动
  4. 阿里开发者招聘节 | 面试题02-04:给定一个二叉搜索树(BST),找到树中第K小的节点
  5. 时间转化_2个关键因素决定福鼎白茶的后期转化
  6. 一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍
  7. 0x00000000指令引用的内存不能为written_JVM03——对象实例化,内存布局,访问定位...
  8. Linux(一)-- Linux环境搭建
  9. ubuntu 下 Graphviz 的安装及神经网络的绘图
  10. 负载均衡故障排错指南 (3)
  11. 容器技术Docker K8s 30 容器服务ACK基础与进阶-弹性伸缩
  12. Spring boot Redis客户端 乱码
  13. 【Web前端面试笔试题】2022.08
  14. Leetcode(347)——前 K 个高频元素
  15. 每日一练_是程序呀(每日更新)_XML
  16. 最后的最后的一场考试
  17. table固定单元格宽度
  18. Squid缓存服务器原理与实战演练
  19. uniapp修改字体
  20. 事业单位计算机类专技岗职称,事业单位改革,专技岗和管理岗哪个好?

热门文章

  1. 光脚丫学LINQ(002):筛选数据
  2. 动态构建siteMap(导航,asp.net)
  3. 36氪研究院:机器人行业产业图谱
  4. Android SDCard Mount 流程分析(一)
  5. “5W1H”带你来学习JavaScript
  6. JSP网站开发基础总结《六》
  7. linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf)
  8. JACK——TeamsManual3 Roles
  9. 计算机学习 -快捷键
  10. Linux命令ps解读