HDU 3127 WHUgirls dp背包问题
WHUgirlsTime Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
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
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背包问题的更多相关文章
- HDU 3127 WHUgirls(完全背包)
HDU 3127 WHUgirls(完全背包) http://acm.hdu.edu.cn/showproblem.php? pid=3127 题意: 如今有一块X*Y的矩形布条, 然后有n种规格的x ...
- HDU 3127 WHUgirls(DP 完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3127 题目大意:将一块长x宽y的矩形布料,剪成小的矩形(每个给定的小矩形都对应一个价值),使得所有小矩 ...
- HDU 3127 WHUgirls【二维完全背包】
题意:给出一个长为a,宽为b的布,再给出n个围巾的规格(长x,宽y,价值c),问怎样裁剪能够得到最大的价值. ----第一次做的时候不会---然后放到今天做--发现还是不会---于是又--看题解了-- ...
- HDU 1561 树形DP背包问题
这是自己第一道背包上树形结构问题,不是很理解这个概念的可以先看看背包九讲 自己第一次做,看了一下别人的思路,结合着对简单背包问题的求解方式自己一次AC了还是有点小激动的 题目大意是: 攻克m个城市,每 ...
- HDU 3127 WHUgirls
二维完全背包,理解似乎还不够全面,过几天回来再看看这题. #include<cstdio> #include<cstring> #include<cmath> #i ...
- hdu 4123 树形DP+RMQ
http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...
- hdu 4507 数位dp(求和,求平方和)
http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依旧单身! 吉哥依旧单身! DS级码农吉哥依旧单身! 所以 ...
- hdu 3709 数字dp(小思)
http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negati ...
- hdu 4352 数位dp + 状态压缩
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- MVC5控制器、路由、返回类型、选择器、过滤器
ASP.NET MVC5 学习笔记-1 控制器.路由.返回类型.选择器.过滤器 [TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序, ...
- getch()、getche()和getchar()函数
原文:getch().getche()和getchar()函数 getch().getche()和getchar()函数(1) getch()和getche()函数 这两个函数都是从键盘上读入一个字符 ...
- springmvc继承activemq(原创)
1.加入jar包 我项目是用maven构建的,所以这里就给大家贴一下配置了,具体jar大家可以参看下Activemq分类中的文章 <project xmlns="http://mave ...
- Cocos2d-x 3.0final 终结者系列教程12-Vector&map&value
北京时间昨天下午,温40度.中午12:16我来到了篮球场点.思维1分钟决定开站 转球: 我和另一个3队友半开始, 我手中的球的那一刻我突然火爆球不稳,突然问,淡淡的味道橡胶和烧烤的味道混合. 个腾空跳 ...
- 防止tab页重复的去请求服务端
直接看图吧. 左边是企业树,右边是依据企业变化的一个tab页 实现功能:1.我们希望假设选中的企业不变,我们在切换旁边五个tab页的时候,仅仅是第一次进去的时候请求server端.以下来回切换tab页 ...
- java在string和int相互转化
1 如何串 String 转换成整数 int? A. 有两种方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([St ...
- asp.net页面生命周期回顾
---根据一讲师所讲做了一下笔记,仅供参考 会存在些错误 页面声明周期: 1.HttpApplication在第11和第12个事件之间开始了页面声明周期,调用了第8个事件创建实例的pr(Process ...
- 查询select
--------------select查询-------------------查询所有信息(方法一)select * from stuinfo --*号代表所有列--查询所有信息(方法二)sele ...
- GridView使用技巧
http://yushuir.blog.163.com/blog/static/4346713820081023103937681/
- “String.h” 源代码总结
<String.h> 总结: 常用的函数: 一.memchr: 说明:当第一次遇到字符ch时停止查找.如果成功,返回指向字符ch的指针:否则返回NULL. 代码: #include ...