题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3127

题目大意:将一块长x宽y的矩形布料,剪成小的矩形(每个给定的小矩形都对应一个价值),使得所有小矩形产生的价值最大。

Sample Input

1

2 4 4

2 2 2

3 3 9

Sample Output

9

分析:

这题可以可以看做完全背包问题来接。因为:1、每种矩形布可以剪任意多个;2、题目给出的矩形布可以看做背包容量;3、每个矩形布都有一个价值

关键在于找到状态转移方程:设dp[i][j]为长为i宽为j的矩形布的最大价值,下面的图一可以看做待剪的布,图二为小布的尺寸

对于这个问题可以两种如下剪布方案:
 
易知剪布后的价值为每个图形中三块之和。
对于方法一:

dp[i][j] = max(dp[i][j],  dp[i-p[k].x][j]+dp[p[k].x][j-p[k].y]+p[k].value,  dp[i][j-p[k].y]+dp[i-p[k].x][p[k].y]+p[k].value);

对于方法二:

dp[i][j] = max(dp[i][j],  dp[i-p[k].y][j]+dp[p[k].y][j-p[k].x]+p[k].value,  dp[i][j-p[k].x]+dp[i-p[k].y][p[k].x]+p[k].value);

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
using namespace std;
struct node{
int x,y,value;
}p[];
int dp[][]; int max(int a,int b,int c){
int temp = a>b?a:b;
return temp>c?temp:c;
} int main(){
int T,n,x,y;
int i,j,k;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&x,&y);
for(i=;i<n;i++)
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].value);
memset(dp,,sizeof(dp));
for(i=;i<=x;i++){
for(j=;j<=y;j++){
for(k=;k<n;k++){
if(i>=p[k].x &&j>=p[k].y)
dp[i][j] = max(dp[i][j], dp[i-p[k].x][j]+dp[p[k].x][j-p[k].y]+p[k].value,
dp[i][j-p[k].y]+dp[i-p[k].x][p[k].y]+p[k].value);
if(i>=p[k].y &&j>=p[k].x)
dp[i][j] = max(dp[i][j], dp[i-p[k].y][j]+dp[p[k].y][j-p[k].x]+p[k].value,
dp[i][j-p[k].x]+dp[i-p[k].y][p[k].x]+p[k].value);
}
}
}
printf("%d\n",dp[x][y]);
}
return ;
}

HDU 3127 WHUgirls(DP 完全背包)的更多相关文章

  1. HDU 3127 WHUgirls dp背包问题

    WHUgirls Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total ...

  2. HDU 3127 WHUgirls(完全背包)

    HDU 3127 WHUgirls(完全背包) http://acm.hdu.edu.cn/showproblem.php? pid=3127 题意: 如今有一块X*Y的矩形布条, 然后有n种规格的x ...

  3. HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)

    HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...

  4. HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)

    HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那 ...

  5. HDOJ(HDU).1114 Piggy-Bank (DP 完全背包)

    HDOJ(HDU).1114 Piggy-Bank (DP 完全背包) 题意分析 裸的完全背包 代码总览 #include <iostream> #include <cstdio&g ...

  6. HDU 3127 WHUgirls【二维完全背包】

    题意:给出一个长为a,宽为b的布,再给出n个围巾的规格(长x,宽y,价值c),问怎样裁剪能够得到最大的价值. ----第一次做的时候不会---然后放到今天做--发现还是不会---于是又--看题解了-- ...

  7. HDU 3127 WHUgirls

    二维完全背包,理解似乎还不够全面,过几天回来再看看这题. #include<cstdio> #include<cstring> #include<cmath> #i ...

  8. hdu 1561 树形dp+分组背包

    题意:就是给定n个点,每个地点有value[i]的宝物,而且有的宝物必须是另一个宝物取了才能取,问取m个点可以获得的最多宝物价值. 一个子节点就可以返回m个状态,每个状态表示容量为j(j<=m) ...

  9. hdu 4003 树形dp+分组背包 2011大连赛区网络赛C

    题意:求K个机器人从同一点出发,遍历所有点所需的最小花费 链接:点我 Sample Input 3 1 1 //3个点,从1出发,1个机器人 1 2 1 1 3 1 3 1 2 1 2 1 1 3 1 ...

随机推荐

  1. 微软的无限存储空间-OneDrive

    10 月 28 日消息,微软今天宣布为所有 Office 365 的用户提供无上限的云存储服务,也就是 OneDrive 存储空间将从目前的 1TB 变成无上限,而且无需支付额外费用.这意味着曾经困扰 ...

  2. 代码-Weka的决策树类J48

    package kit.weka;   /** * desc:试试Weka的决策树类 * <code>J48Test</code> * */ import java.io.Fi ...

  3. Storm系列(一)集群的安装配置

    安装前说明: 必须先安装zookeeper集群 该Storm集群由三台机器构成,主机名分别为chenx01,chenx02,chenx03,对应的IP分别为192.168.1.110,192.168. ...

  4. Kafka系列(一)安装和配置说明

    单机模式 修改kafak安装文件中 .../kafka_2.9.2-0.8.1.1/config 下面的server.properties 配置文件 1.broker.id=0   [默认不用修改,该 ...

  5. 输入n个数组,数组长度不等,每个数组取出一个数进行组合,求出所有的组合。

    转载声明:原文转自http://www.cnblogs.com/xiezie/p/5511707.html 昨天晚上,有个朋友找到我,他在用matlab编程,但是遇到一个问题,解决不了. 问题如下: ...

  6. Linux必学的命令

    Linux必学的命令Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正 ...

  7. 问题-[Delphi]无法设置断点

    问题现象: 今天突然发现不知何时起DELPHI7除了.dpr文件外,其余各Unit都无法设置断点.即在设计状态下设置了断点,在运行后出现的无效断点!百思不得其解...后查了许多资料,花了两个小时才搞好 ...

  8. AptanaStudio3 安装在win7 64bit时遇到的问题

    最近在研究前端语言,想起可以使用AptanaStudio这个前端利器,没想到安装时却遇到波折.先从网上下载了Aptana版本 3.6.0 64bit问题1 安装进度缓慢,第一次安装时,显示downlo ...

  9. C++ CheckListBox

    实现过程 CCheckListBox    listbox1;     listbox1.AddString("葡萄");     listbox1.AddString(" ...

  10. Java中各种排序算法

    package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treero ...