思路:将v1,v2,k都当作一种体积,每种物品只能取一次,求max.......

反思:以前写背包,由于只有一个体积,所以习惯性的在for中,就所取的最小值限制,而在这次,因为这里导致wa了,具体是因为在多个体积限制的背包里,当这个体积小于它的最小体积时,它可以不去减它的最小体积,而是作为一种状态来传递其他体积的限制的值........

wa代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[105][105][110],s[105][3];
int max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int n,v1,v2,k;
while(scanf("%d%d%d%d",&n,&v1,&v2,&k)>0)
{
for(int i=1;i<=n;i++)
scanf("%d%d%d",&s[i][0],&s[i][1],&s[i][2]);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
for(int j=v1;j>=s[i][0];j--)
{
for(int p=v2;p>=s[i][1];p--)
{
for(int q=k;q>=0;q--)
{
int maxx=0;
if(maxx<dp[j-s[i][0]][p][q]+s[i][2])
maxx=dp[j-s[i][0]][p][q]+s[i][2]; if(maxx<dp[j][p-s[i][1]][q]+s[i][2])
maxx=dp[j][p-s[i][1]][q]+s[i][2]; if(q>0&&maxx<dp[j][p][q-1]+s[i][2])
maxx=dp[j][p][q-1]+s[i][2]; if(maxx<dp[j][p][q])
maxx=dp[j][p][q];
dp[j][p][q]=maxx;
}
}
}
}
printf("%d\n",dp[v1][v2][k]);
}
return 0;
}

ac代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[105][105][110],s[105][3];
int max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int n,v1,v2,k;
while(scanf("%d%d%d%d",&n,&v1,&v2,&k)>0)
{
for(int i=1;i<=n;i++)
scanf("%d%d%d",&s[i][0],&s[i][1],&s[i][2]);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
for(int j=v1;j>=0;j--)
{
for(int p=v2;p>=0;p--)
{
for(int q=k;q>=0;q--)
{
int maxx=0;
if(j>=s[i][0]&&maxx<dp[j-s[i][0]][p][q]+s[i][2])
maxx=dp[j-s[i][0]][p][q]+s[i][2]; if(p>=s[i][1]&&maxx<dp[j][p-s[i][1]][q]+s[i][2])
maxx=dp[j][p-s[i][1]][q]+s[i][2]; if(q>0&&maxx<dp[j][p][q-1]+s[i][2])
maxx=dp[j][p][q-1]+s[i][2]; if(maxx<dp[j][p][q])
maxx=dp[j][p][q];
dp[j][p][q]=maxx;
}
}
}
}
printf("%d\n",dp[v1][v2][k]);
}
return 0;
}

dp之多维背包hdu4501的更多相关文章

  1. dp之二维背包poj2576

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

  2. (第三场) A PACM Team 【dp,五维背包】

    链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  3. dp之二维背包poj1837(天平问题 推荐)

    题意:给你c(2<=c<=20)个挂钩,g(2<=g<=20)个砝码,求在将所有砝码(砝码重1~~25)挂到天平(天平长  -15~~15)上,并使得天平平衡的方法数..... ...

  4. dp之多维背包hdu2159

    二维背包问题,我是觉得这个题目数据比较水,虽然它最后说了怪可以无限个,但是它却只能最多杀s个,也就是所有品种的怪最多为s个,那么就是二维完全背包的问题了.......同时,它没有说一定要杀s只怪,所以 ...

  5. dp之二维背包hdu3496

    题意:给你n张电影门票,但一次只可以买m张,并且你最多可以看L分钟,接下来是n场电影,每一场电影a分钟,b价值,要求恰好看m场电影所得到的最大价值,要是看不到m场电影,输出0: 思路:这个题目可以很明 ...

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

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

  7. dp 二维乃至多维背包

    洛谷P1855 榨取kkksc03 分析:套路是很明显的01背包,但是这时受约束的变量有两个了,这种情况下就该用多维背包了 分析方法一样的,用dp[i][j][k]表示从前i个愿望中挑选总时间和总金钱 ...

  8. hdu4501——小明系列故事——买年货(多维背包)

    题解: 思路:将v1,v2,k都当作一种体积,开三维dp数组,每种物品只能取一次 代码中的for循环是倒着进行的,知道01背包和完全背包的肯定明白,倒着进行的就代表每种物品只选择一次 代码: 1 #i ...

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

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

随机推荐

  1. getpass模块

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #getpass模块 import getpass ''' >>> help(getpass ...

  2. C++开发WPF,Step by Step

    示例代码 使用C++来开发WPF,主要是如何在MFC(Win32)的窗口中Host WPF的Page.下面我就做个详细的介绍. 一.创建工程, 由于MFC的Wizard会生成很多用不到的代码,所以我准 ...

  3. 【LeetCode】19. Remove Nth Node From End of List (2 solutions)

    Remove Nth Node From End of List Given a linked list, remove the nth node from the end of list and r ...

  4. Android学习系列(9)--App列表之分组ListView

    吸引用户的眼球,是我们至死不渝的追求:      第一时间呈现最有价值的信息,简明大方,告诉客户,你的选择是多么的明智,这正是你寻觅已久的东西.       分组的应用场合还是很多的,有数据集合的地方 ...

  5. LINUX创建本地yum源

    .创建一个文件夹,把光盘中所有的RPM安装包都拷贝进来 # mkdir /rpms_yum .把光盘上的RPM包全部复制到rpms_yum中 # cd /mnt/cdrom/Packages/ # c ...

  6. Python isspace() 方法

    描述 Python isspace() 方法检测字符串是否只由空格组成. 语法 isspace() 方法语法: S.isspace() 参数 无. 返回值 如果字符串中至少有一个字符,并且所有字符都是 ...

  7. mysql 更新数据表的记录

    对于表里的记录值,可以通过update 命令进行更改,语法如下: UPDATE tablename SET field1=value1,field2.=value2,……fieldn=valuen [ ...

  8. mysql-5.7 show engine innodb status 详解

    一.show engine innodb status 简介: show engine innodb status 是mysql提供的一个用于查看innodb引擎时间信息的工具,就目前来说有两处比较 ...

  9. 深入mysql “ON DUPLICATE KEY UPDATE” 语法的分析

    本篇文章是对mysql “ON DUPLICATE KEY UPDATE”语法进行了详细的分析介绍,需要的朋友参考下. mysql “ON DUPLICATE KEY UPDATE” 语法 如果在IN ...

  10. cocos2dx 3.x ccDrawLine一个坑

    ccDrawLine,如果传进去的坐标是INFINITY,画不出来.