HDU 3127 WHUgirls(矩阵切割)
来源:互联网 发布:淘宝被骗了钱怎么办 编辑:程序博客网 时间:2024/06/05 20:38
http://acm.hdu.edu.cn/showproblem.php?pid=3127
题意:
给出布条有n种剪法还有布条的长宽分别为X,Y,然后给出每种剪法的小布条的长宽与价值,要求最后剪除布条的总最大价值。
思路:
这道题布条的总大小即为容量,而且每种剪法的小布条都有价格,很明显的背包题,而且由于每种减法可以多次使用,构成一个完全背包,由于布条有长宽,所以使用二维数组。
要注意的是小布条的长宽并不是固定的,可以旋转,所以剪法有两种,得出两个状态转移方程
方程1:dp[i][j] = max(dp[i][j],max((dp[i-a[k].x][j]+dp[a[k].x][j-a[k].y]),(dp[i][j-a[k].y]+dp[i-a[k].x][a[k].y]))+a[k].v);
方程2:dp[i][j] = max(dp[i][j],max((dp[i-a[k].y][j]+dp[a[k].y][j-a[k].x]),(dp[i][j-a[k].x]+dp[i-a[k].y][a[k].x]))+a[k].v);
以方程1为例要注意的是,大布条剪去小布条后剩下的布不一定是矩形,这种情况下剩下的布条可以分成两个矩形,所以总价值就是这三个矩形之和,而剩下的矩形又可以看做心的大矩形,由此循环得到max((dp[i-a[k].x][j]+dp[a[k].x][j-a[k].y]),(dp[i][j-a[k].y]+dp[i-a[k].x][a[k].y]]))+a[k].v。
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>const int N=1010;using namespace std;struct piece{ int x,y,p;}node[N/100];int dp[N][N];int main(){// freopen("in.txt", "r", stdin); int cas; scanf("%d",&cas); while(cas--){ int n,x,y; scanf("%d%d%d",&n,&x,&y); for(int i=1; i<=n; i++) scanf("%d%d%d",&node[i].x,&node[i].y,&node[i].p); memset(dp, 0, sizeof(dp)); for(int i=0; i<=x; i++){ for(int j=0; j<=y; j++){ for(int k=1; k<=n; k++){ if(i >= node[k].x && j >= node[k].y){ dp[i][j] = max(dp[i][j], max(dp[node[k].x][j-node[k].y] + dp[i-node[k].x][j],dp[i-node[k].x][node[k].y]+dp[i][j-node[k].y])+node[k].p); } if(i >= node[k].y && j >= node[k].x){ dp[i][j] = max(dp[i][j], max(dp[node[k].y][j-node[k].x] + dp[i-node[k].y][j],dp[i-node[k].y][node[k].x]+dp[i][j-node[k].x])+node[k].p); } } } } printf("%d\n",dp[x][y]); } return 0;}
0 0
- HDU 3127 WHUgirls(矩阵切割)
- hdu 3127(矩阵切割)
- hdu 3127 WHUgirls(二维背包)
- HDU 3127 WHUgirls(二维背包)
- hdu 3127 WHUgirls(完全背包)
- HDU 3127 WHUgirls(二维背包)
- 【HDU 3127】WHUgirls(二维完全背包)
- HDU-3127-WHUgirls(完全背包)
- hdu 3127 WHUgirls
- hdu 3127 WHUgirls
- HDU 3127 WHUgirls
- HDU 3127 WHUgirls
- hdu 3127 WHUgirls
- 【HDU】 3127 WHUgirls
- HDU-3127 WHUgirls
- HDU 3127 WHUgirls 背包问题
- HDU 3127 WHUgirls (完全背包)
- HDU 3127 WHUgirls(完全背包)
- POJ3159差分约束(SPFA)
- Android-动画
- Mysql触发器
- Reflexil 反编译.NET
- CentOS6.5命令行下安装X图形界面系统
- HDU 3127 WHUgirls(矩阵切割)
- Openwrt环境下I2C操作
- java加密算法
- apache 提示You don't have permission to access /test.php on this server.怎样解决
- TCP超时处理
- 操作系统精髓与设计原理学习笔记五:并发性(互斥和同步)
- 债券基金收益与哪些因素有关?
- 哈弗曼树的创建
- 债券型基金的主要风险是什么?