当前位置: 首页 > news >正文

HDU - 3127

 

传送门

 

有一个X*Y的大矩形,有N种小矩形,每种两条边为x[i],y[i],价值val[i](旋转90度,价值不变);每次操作允许你将矩形平行着边将矩形切割成两个小的矩形,求你能切割多次切割原来的大矩形能获得的最大价值。

定义dp[i][j]为大小为i*j的矩形能获得的最大价值。对于每个i*j矩形,我们枚举每个小矩形,将小矩形的放在大矩形的左上角,分别沿着小矩形的某条边进行切割,然后再切割得到小矩形,这时把原有的大矩形切割成小矩形和另外两个矩形。将小矩形旋转90度,再进行上述操作即可。

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #define INF 0x3f3f3f3f
 6 #define MOD 1000000007
 7 using namespace std;
 8 typedef long long LL;
 9 
10 const int maxn = 1e3 + 10;
11 int T;
12 int N;
13 int X, Y;
14 int val[maxn], x[maxn], y[maxn];
15 int dp[maxn][maxn];
16 
17 int main(int argc, const char * argv[]) {
18     scanf("%d", &T);
19     while (T--) {
20         memset(dp, 0, sizeof(dp));
21         scanf("%d%d%d", &N, &X, &Y);
22         for (int i = 0; i < N; i++) {
23             scanf("%d%d%d", &x[i], &y[i], &val[i]);
24         }
25         for (int i = 0; i <= X; i++) {
26             for (int j = 0; j <= Y; j++) {
27                 for (int k = 0; k < N; k++) {
28                     int a = x[k], b = y[k];
29                     if (i >= a && j >= b) {
30                         dp[i][j] = max(dp[i][j],
31                                    max(dp[a][j - b] + dp[i - a][j], dp[i - a][b] + dp[i][j - b]) + val[k]);
32                     }
33                     if (j >= a && i >= b) {
34                         dp[i][j] = max(dp[i][j],
35                                    max(dp[b][j - a] + dp[i - b][j], dp[i - b][a] + dp[i][j - a]) + val[k]);
36                     }
37                 }
38             }
39         }
40         printf("%d\n", dp[X][Y]);
41     }
42     return 0;
43 }

 

转载于:https://www.cnblogs.com/xFANx/p/7420017.html

相关文章:

  • linux shell创建目录、遍历子目录
  • 高德公布2016年度交通报告:十大堵城上榜
  • centos 安装ftp
  • PHP PDO操作MYSQL
  • time模块
  • 分布式事物理论与实践
  • OpenCV中的新函数connectedComponentsWithStats使用
  • ASP.NET Core 运行原理解剖[2]:Hosting补充之配置介绍
  • Spring Boot整合Quartz实现定时任务表配置
  • Arcgis for Js实现graphiclayer的空间查询(续)
  • 【树莓派】服务配置相关2:基于RPi Desktop的服务配置
  • (推荐)叮当——中文语音对话机器人
  • 睿仁医疗郑世斌:医疗智能硬件数据精度应放在第一位
  • 软件开发的流程
  • 理解.NET中的异常(二)
  • Django 博客开发教程 8 - 博客文章详情页
  • JavaScript新鲜事·第5期
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis中的lru算法实现
  • 复杂数据处理
  • 模型微调
  • 区块链分支循环
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 小程序 setData 学问多
  • 新书推荐|Windows黑客编程技术详解
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用 Swift 编写面向协议的视图
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #Linux(帮助手册)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (02)vite环境变量配置
  • (07)Hive——窗口函数详解
  • (52)只出现一次的数字III
  • (Python第六天)文件处理
  • (TOJ2804)Even? Odd?
  • (备忘)Java Map 遍历
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (转)拼包函数及网络封包的异常处理(含代码)
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET : 在VS2008中计算代码度量值
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET中的Exception处理(C#)
  • @Builder用法
  • @PreAuthorize注解
  • @RequestMapping 的作用是什么?
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [delphi]保证程序只运行一个实例
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页