dp之多维背包hdu4501
思路:将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的更多相关文章
- dp之二维背包poj2576
题意:有一群sb要拔河,把这群sb分为两拨,两拨sb数只差不能大于1,输出这两拨人的体重,小的在前面...... 思路:把总人数除2,总重量除2,之后你会发现就是个简单的二维背包,有两个限制..... ...
- (第三场) A PACM Team 【dp,五维背包】
链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- dp之二维背包poj1837(天平问题 推荐)
题意:给你c(2<=c<=20)个挂钩,g(2<=g<=20)个砝码,求在将所有砝码(砝码重1~~25)挂到天平(天平长 -15~~15)上,并使得天平平衡的方法数..... ...
- dp之多维背包hdu2159
二维背包问题,我是觉得这个题目数据比较水,虽然它最后说了怪可以无限个,但是它却只能最多杀s个,也就是所有品种的怪最多为s个,那么就是二维完全背包的问题了.......同时,它没有说一定要杀s只怪,所以 ...
- dp之二维背包hdu3496
题意:给你n张电影门票,但一次只可以买m张,并且你最多可以看L分钟,接下来是n场电影,每一场电影a分钟,b价值,要求恰好看m场电影所得到的最大价值,要是看不到m场电影,输出0: 思路:这个题目可以很明 ...
- 二维背包(钟神想要的)(不是DP)
[问题描述] 背包是个好东西,希望我也有.给你一个二维的背包,它的体积是? × ?.现在你有一些大小为1× 2和1×3的物品,每个物品有自己的价值.你希望往背包里面装一些物品,使得它们的价值和最大,问 ...
- dp 二维乃至多维背包
洛谷P1855 榨取kkksc03 分析:套路是很明显的01背包,但是这时受约束的变量有两个了,这种情况下就该用多维背包了 分析方法一样的,用dp[i][j][k]表示从前i个愿望中挑选总时间和总金钱 ...
- hdu4501——小明系列故事——买年货(多维背包)
题解: 思路:将v1,v2,k都当作一种体积,开三维dp数组,每种物品只能取一次 代码中的for循环是倒着进行的,知道01背包和完全背包的肯定明白,倒着进行的就代表每种物品只选择一次 代码: 1 #i ...
- hdu 4501 小明系列故事——买年货_二维背包
题目:你可以有v1元,v2代金券,v3个物品免单,现在有n个商品,商品能用纸币或者代金券购买,当然你可以买v3个商品免费.问怎么最大能买多少价值 题意: 思路二维背包,dp[v1][v2][v3]=M ...
随机推荐
- getpass模块
# -*- coding: utf-8 -*- #python 27 #xiaodeng #getpass模块 import getpass ''' >>> help(getpass ...
- C++开发WPF,Step by Step
示例代码 使用C++来开发WPF,主要是如何在MFC(Win32)的窗口中Host WPF的Page.下面我就做个详细的介绍. 一.创建工程, 由于MFC的Wizard会生成很多用不到的代码,所以我准 ...
- 【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 ...
- Android学习系列(9)--App列表之分组ListView
吸引用户的眼球,是我们至死不渝的追求: 第一时间呈现最有价值的信息,简明大方,告诉客户,你的选择是多么的明智,这正是你寻觅已久的东西. 分组的应用场合还是很多的,有数据集合的地方 ...
- LINUX创建本地yum源
.创建一个文件夹,把光盘中所有的RPM安装包都拷贝进来 # mkdir /rpms_yum .把光盘上的RPM包全部复制到rpms_yum中 # cd /mnt/cdrom/Packages/ # c ...
- Python isspace() 方法
描述 Python isspace() 方法检测字符串是否只由空格组成. 语法 isspace() 方法语法: S.isspace() 参数 无. 返回值 如果字符串中至少有一个字符,并且所有字符都是 ...
- mysql 更新数据表的记录
对于表里的记录值,可以通过update 命令进行更改,语法如下: UPDATE tablename SET field1=value1,field2.=value2,……fieldn=valuen [ ...
- mysql-5.7 show engine innodb status 详解
一.show engine innodb status 简介: show engine innodb status 是mysql提供的一个用于查看innodb引擎时间信息的工具,就目前来说有两处比较 ...
- 深入mysql “ON DUPLICATE KEY UPDATE” 语法的分析
本篇文章是对mysql “ON DUPLICATE KEY UPDATE”语法进行了详细的分析介绍,需要的朋友参考下. mysql “ON DUPLICATE KEY UPDATE” 语法 如果在IN ...
- cocos2dx 3.x ccDrawLine一个坑
ccDrawLine,如果传进去的坐标是INFINITY,画不出来.