WHUgirls

Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1565    Accepted Submission(s): 601

Problem Description
There are many pretty girls in Wuhan University, and as we know, every girl loves pretty clothes, 
so do they. One day some of them got a huge rectangular cloth and they want to cut it into small
 rectangular pieces to make scarves. But different girls like different style, and they voted each 
style a price wrote down on a list. They have a machine which can cut one cloth into exactly
 two smaller rectangular pieces horizontally or vertically, and ask you to use this machine
 to cut the original huge cloth into pieces appeared in the list. Girls wish to get the highest
 profit from the small pieces after cutting, so you need to find out a best cutting strategy. 
You are free to make as many scarves of a given style as you wish, or none if desired.
 Of course, the girls do not require you to use all the cloth.
 
Input
The first line of input consists of an integer T, indicating the number of test cases.

The first line of each case consists of three integers N, X, Y, N indicating there are
 N kinds of rectangular that you can cut in and made to scarves; X, Yindicating the 
dimension of the original cloth. The next N lines, each line consists of two integers, 
xi, yi, ci, indicating the dimension and the price of the ith rectangular piece cloth
 you can cut in.
 
Output
Output the maximum sum of prices that you can get on a single line for each case.

Constrains

0 < T <= 20

0 <= N <= 10; 0 < X, Y <= 1000

0 < xi <= X; 0 < yi <= Y; 0 <= ci <= 1000

 
Sample Input
1
2 4 4
2 2 2
3 3 9
 
Sample Output
9
 
Source
 
Recommend
lcy
 

题解:

这是一道模仿现实的题目。它给的是长跟宽,你要知道。。现实中长跟宽是可以互换的。当然,你也可以这样再优化一下,可能存在长跟宽相同,价值不同的,保留最大的就好了。

注意。。题目中的切开是一切到底。不是任意切!!这样列出的DP方程是不一样的
刚开始我的DP方程是
i,j表示长为i,宽为j的空间
f[i][j]=max(f[i][j],f[i][j-k]+f[i][k],f[i-k][j]+f[k][j]) + 一点点优化。。 f[i][j]初始状态就是所给的一系列长跟宽跟价值. 
f[p[k].x][p[k].y]=p[k].c
。。不过这样水不过去。

后来改写成2维的背包。593MS过掉。

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

要推出这条式子,你拿出一块草稿画一下就好了。  先中间切下去,然后在右边那小块再横着来一下。就是了。。

/*
* @author ipqhjjybj
* @date 20130724
*
*/ #include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime> #include <iostream>
#include <cmath>
#include <algorithm>
#include <numeric>
#include <utility> #include <cstring>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <string>
using namespace std; #define inf 0x3f3f3f3f
#define MAXN 1005
#define clr(x,k) memset((x),(k),sizeof(x))
#define clrn(x,k) memset((x),(k),(n+1)*sizeof(int))
#define cpy(x,k) memcpy((x),(k),sizeof(x))
#define Base 10000 typedef vector<int> vi;
typedef stack<int> si;
typedef vector<string> vs;
#define sz(a) int((a).size())
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define rep(i,n) for(int i = 0;i < n;++i)
#define foreach(it,c) for(vi::iterator it = (c).begin();it != (c).end();++it) #define min(a,b) ((a)<(b)?(a):(b))
struct node{
int x,y,c;
}p[MAXN];
int dp[MAXN][MAXN];
int X,Y,n;
int max(int a,int b){
return a>b?a:b;
}
int main(){
//freopen("3127.in","r",stdin);
int T;
scanf("%d",&T);
while(T--){
clr(dp,0);
scanf("%d %d %d",&n,&X,&Y);
for(int i=0,a,b,c;i<n;i++){
scanf("%d %d %d",&a,&b,&c);
p[i<<1].x=a,p[i<<1].y=b,p[i<<1].c=c;
p[i<<1|1].x=b,p[i<<1|1].y=a,p[i<<1|1].c=c;
}
n <<=1;
for(int i=0;i<=X;i++)
for(int j=0;j<=Y;j++){
for(int k=0;k<n;k++){
if(i>=p[k].x&&j>=p[k].y){
dp[i][j]=max(max(dp[i-p[k].x][j]+p[k].c+dp[p[k].x][j-p[k].y],dp[i][j]),
dp[i-p[k].x][p[k].y]+dp[i][j-p[k].y]+p[k].c);
//printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);
}
}
dp[i][j]=max(dp[i][j],dp[i-1][j]);
dp[i][j]=max(dp[i][j],dp[i][j-1]);
}
printf("%d\n",dp[X][Y]);
}
return 0;
}

HDU 3127 WHUgirls dp背包问题的更多相关文章

  1. HDU 3127 WHUgirls(完全背包)

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

  2. HDU 3127 WHUgirls(DP 完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3127 题目大意:将一块长x宽y的矩形布料,剪成小的矩形(每个给定的小矩形都对应一个价值),使得所有小矩 ...

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

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

  4. HDU 1561 树形DP背包问题

    这是自己第一道背包上树形结构问题,不是很理解这个概念的可以先看看背包九讲 自己第一次做,看了一下别人的思路,结合着对简单背包问题的求解方式自己一次AC了还是有点小激动的 题目大意是: 攻克m个城市,每 ...

  5. HDU 3127 WHUgirls

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

  6. hdu 4123 树形DP+RMQ

    http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...

  7. hdu 4507 数位dp(求和,求平方和)

    http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依旧单身! 吉哥依旧单身! DS级码农吉哥依旧单身! 所以 ...

  8. hdu 3709 数字dp(小思)

    http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negati ...

  9. hdu 4352 数位dp + 状态压缩

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. MVC验证04-自定义验证规则、日期范围验证

    原文:MVC验证04-自定义验证规则.日期范围验证 本文体验范围验证.与本文相关的包括: MVC验证01-基础.远程验证   MVC验证02-自定义验证规则.邮件验证   MVC验证03-自定义验证规 ...

  2. hibernate之使用Annotation注解搭建项目

    之前开发都是使用xml配置来开发项目,开发起来特别繁琐 大家会发现通过注解大大简化了我们开发流程,使我们从繁琐的XML配置中解放出来. 第一步:新建一个javaweb项目.并将hibernate需要的 ...

  3. Oralce 导出脚本命令,定时执行

    原文:Oralce 导出脚本命令,定时执行 @echo off @echo ================================================ @echo  window ...

  4. MVC5+ 路由特性

    MVC5+ 路由特性 概述 ASP.NET MVC 5支持一种新的路由协议,称为路由特性. MVC5也支持以前定义路由的方式,你可以在一个项目中混合使用这两种方式来定义路由. 案例 1.使用Visua ...

  5. [tarjan] hdu 3836 Equivalent Sets

    主题链接: http://acm.hdu.edu.cn/showproblem.php? pid=3836 Equivalent Sets Time Limit: 12000/4000 MS (Jav ...

  6. ACE_Message_Block 学习

    本文参考http://www.cnblogs.com/TianFang/archive/2006/12/30/607960.html 1. ACE_Message_Block 的length() 返回 ...

  7. C# WinForm程序退出的方法(转)

    转自:http://www.cnblogs.com/yugen/archive/2010/08/10/1796864.html 1.this.Close();   只是关闭当前窗口,若不是主窗体的话, ...

  8. VS 文件自动定位功能

    在Visual Studio 中,当你在所有打开的文件中进行切换时,在Solution Explorer中也会自定定位到这个文件的目录下面,这个功能用来查找当前文件是非常有用.在Tools->O ...

  9. ASP.NET MVC项目里创建一个aspx视图

    先从控制器里添加视图 视图引擎选"ASPX(C#)",使用布局或模板页不要选. 在Views\EAV目录里,生成的aspx是个单独的页面,没有代码文件,所以代码也要写在这个文件里. ...

  10. linux下开机启动脚本的方法

    1.准备好要随机启动的程序,例如 /root/test.sh .确保其可执行. 2.在目录 /etc/init.d/ 下编写控制脚本 test . #!/bin/sh ### BEGIN INIT I ...