这道题的难点在于价值可以多。

这道题我一开始用的是前面的状态推现在的状态

实现比较麻烦,因为价值可以多,所以就设最大价值

为题目给的最大价值乘以10

#include<cstdio>
#include<algorithm>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 1123;
const int MAXM = 112;
int f[MAXN][MAXN], n, m1, m2;
int a[MAXN], b[MAXN], w[MAXN]; int main()
{
scanf("%d%d%d", &m1, &m2, &n);
REP(i, 0, n)
scanf("%d%d%d", &a[i], &b[i], &w[i]); int ans = 1e9;
memset(f, 0x3f, sizeof(f));
f[0][0] = 0; REP(i, 0, n)
for(int j = m1 * 10; j >= a[i]; j--)
for(int k = m2 * 10; k >= b[i]; k--)
{
f[j][k] = min(f[j][k], f[j-a[i]][k-b[i]] + w[i]);
if(j >= m1 && k >= m2) ans = min(ans, f[j][k]);
}
printf("%d\n", ans); return 0;
}

然后后来发现好像用当前更新后来的状态是更方便的

只需要在超过最大价值的时候取最大价值就好了。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 1123;
const int MAXM = 112;
int f[MAXN][MAXN], n, m1, m2;
int a[MAXN], b[MAXN], w[MAXN]; int main()
{
scanf("%d%d%d", &m1, &m2, &n);
REP(i, 0, n)
scanf("%d%d%d", &a[i], &b[i], &w[i]); memset(f, 0x3f, sizeof(f));
f[0][0] = 0;
REP(i, 0, n)
for(int j = m1; j >= 0; j--)
for(int k = m2; k >= 0; k--)
{
int t1 = min(m1, j + a[i]), t2 = min(m2, k + b[i]);
f[t1][t2] = min(f[t1][t2], f[j][k] + w[i]);
}
printf("%d\n", f[m1][m2]); return 0;
}

caioj 1087 动态规划入门(非常规DP11:潜水员)(二维背包)的更多相关文章

  1. 二维背包(钟神想要的)(不是DP)

    [问题描述] 背包是个好东西,希望我也有.给你一个二维的背包,它的体积是? × ?.现在你有一些大小为1× 2和1×3的物品,每个物品有自己的价值.你希望往背包里面装一些物品,使得它们的价值和最大,问 ...

  2. hdu 4501 小明系列故事——买年货_二维背包

    题目:你可以有v1元,v2代金券,v3个物品免单,现在有n个商品,商品能用纸币或者代金券购买,当然你可以买v3个商品免费.问怎么最大能买多少价值 题意: 思路二维背包,dp[v1][v2][v3]=M ...

  3. HDU 2159 FATE (二维背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 解题报告:这题实际上是一个二维的背包问题,也可以由01背包扩展而来,01背包用一维数组,可想而知 ...

  4. rqnoj-329-刘翔!加油!-二维背包

    注意排除干扰项. 因为价值不会相等,所以价值的多少与本题没有任何关系,. 所以价值为干扰项,所以不用考虑. 二维背包,简单求解. #include<stdio.h> #include< ...

  5. NOI 4978 宠物小精灵之收服(二维背包)

    http://noi.openjudge.cn/ch0206/4978/ 描述 宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事. 一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物 ...

  6. dp之二维背包poj2576

    题意:有一群sb要拔河,把这群sb分为两拨,两拨sb数只差不能大于1,输出这两拨人的体重,小的在前面...... 思路:把总人数除2,总重量除2,之后你会发现就是个简单的二维背包,有两个限制..... ...

  7. hdu 3496 Watch The Movie (二维背包)

    Watch The Movie Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...

  8. 二维背包---P1509 找啊找啊找GF

    P1509 找啊找啊找GF 题解 很明显这是一道二维背包题目 如果一个dp数组做不了,那么我们就再来一个dp数组 题目要求,花费不超过 m ,消耗人品不超过  r  ,泡到尽量多的妹子,时间尽量少 f ...

  9. 二维背包---P1855 榨取kkksc03

    P1855 榨取kkksc03 题解 二维背包板子题 f[ i ][ j ] 前 n 个物品,花费金钱不超过 i ,花费时间不超过 j 的最大价值 如果每个物品只能选一次,那么就相当于在01背包上多加 ...

随机推荐

  1. 移动端font-size适配

    html{font-size:10px} @media screen and (min-width:321px) and (max-width:375px){html{font-size:11px}} ...

  2. js邮箱,汉字,数字 表单验证

    //电子邮箱验证 function isEmail(str) { var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_ ...

  3. 正则效验url

    上篇文章讲到多主题的解决方案:简单暴力的TP5多主题方案 为了简化配置,所以将域名前的协议 http/https 截取了. 后台配置时就需要效验配置的格式是否正确,需要用到的正则代码如下: /*** ...

  4. BZOJ3413: 匹配(后缀自动机,Parent树,线段树合并)

    Description Input 第一行包含一个整数n(≤100000). 第二行是长度为n的由0到9组成的字符串. 第三行是一个整数m. 接下来m≤5·10行,第i行是一个由0到9组成的字符串s, ...

  5. linux SVN服务器创建版本库

    1.安装svn服务 # yuminstall subversion 2.新建一个目录用于存储SVN所有文件    # mkdir /home/svn 3.在上面创建的文件夹中为项目 project_1 ...

  6. 平衡二叉树(AVLTREE,双链表实现)

    首先说下好久没更新了,最近打游戏和工作都有点多,o(^▽^)o. 写这个AVL发现自己的代码风格好差,尤其是变量命名这块,后来意识到了,想去改,但是太多了,改了几个就不想改了,做这个是记录下自己的成长 ...

  7. (转)RestFul 无状态的一点认识

    今天早上在Yahoo的邮件列表里看到一篇颇有意思的讨论,标题为RESTful vs. unRESTful: Session IDs and Authentication(51CTO编者注:意为REST ...

  8. df -h 挂死

    df -h 卡死的情况,那是因为无法统计挂载的目录的大小 一般是因为还挂载了一些外部的目录,如nfs的目录 可以用mount | column -t 命令查看哪些目录 然后umount这些目录, 一般 ...

  9. hdu 1518 Square 深搜,,,,花样剪枝啊!!!

    Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  10. python __future__ 的几种特性

    今天看tensorflow的代码,看到python里面有这么几句: from __future__ import absolute_import from __future__ import divi ...