CSU 1547 Rectangle(01背包)
来源:互联网 发布:java集合类详解 编辑:程序博客网 时间:2024/05/16 11:21
题意
给你一个n个1*x和2*x的矩形,这些矩阵不能翻转,只能横着摆放。
现在要你用这些矩形拼成 2*m的矩形,问m最短是多少。
解析
很显然2*x的矩阵的长度可以直接加在一起,关键看1*x的矩形,1*x的矩形最优的是选择两段和差距最小的,那么这就可以转换为求到 sum/2 最多可以组成多少的01背包问题。
AC代码
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1e4 + 10;int width[N], dp[N];int main() { //freopen("in.txt", "r", stdin); int T, n; int a, b; scanf("%d", &T); while(T--) { scanf("%d", &n); int ans = 0, cnt = 0; int sum = 0; for(int i = 0; i < n; i++) { scanf("%d%d", &a, &b); if(a == 2) { ans += b; }else { width[cnt++] = b; sum += b; } } sort(width, width + cnt); memset(dp, 0, sizeof(dp)); for(int i = 0; i < cnt; i++) { for(int j = sum/2; j >= width[i]; j--) { dp[j] = max(dp[j], dp[j-width[i]] + width[i]); } } printf("%d\n", ans + max(dp[sum/2], sum-dp[sum/2])); } return 0;}
0 0
- CSU 1547 Rectangle(01背包)
- csu 1547: Rectangle (01背包)
- csu 1547: Rectangle (01背包)
- CSU 1547-Rectangle(0-1背包)
- dp --- CSU 1547: Rectangle
- CSU 1547: Rectangle
- CSU 1547 背包
- (01背包)Rectangle
- Rectangle 0-1背包
- CSU 1326: The contest(并查集+分组背包)
- 湖南多校对抗赛---Rectangle(01背包)
- csu(背包的变形题)
- CSU 1086 超市购物 分组背包问题
- CSU 1447: Mario Kart 背包+最短路
- CSU 1580Outing 强连通+背包
- CSU 1671 经营小卖部 (完全背包 DP)
- 背包问题(01背包,完全背包,多重背包)
- 背包问题(01背包,完全背包,多重背包)
- wornet 安装 ./configure 出现 WARNING: Can't find Tcl configuration definitions
- 只要你不努力,就一定有人替代你
- python爬虫Pragmatic系列III
- 中南OJ1551: Longest Increasing Subsequence Again(分块+离散化线段树)
- 调用webservice异常总结
- CSU 1547 Rectangle(01背包)
- 【SICP练习】126 练习3.57
- 第四周阅读程序2
- LeetCode OJ Unique Binary Search Trees II
- HDU 4468 Spy KMP + 贪心 (2012成都区域赛E题)
- 你所不知道的html5与html中的那些事(一)
- wornet安装
- 单链表模拟一元多项式加减乘运算
- 头插法建单链表