CF1268B 题解

题目翻译

给你一个杨表,用一个有 \(n\) 个元素的数组 \(a\) 表示杨表每一列的高度。你需要用 \(1 \times 2\) 或 \(2 \times 1\) 的骨牌填充这个杨表,求出最多填充的骨牌数量。

题目分析

我们先来处理一个问题:什么是杨表?

  • 杨表是一种每行长度(或每列高度) 单调递减的不规则图,注意这里 并非 要求严格递减,相邻行的长度(或列的高度)可以相同。

对于这道题,我们将杨表交替染色。为了统一标准,我们规定第奇数行的第奇数个位置染为黑色,交错排列。

例如题目中给出的图片,染色后如下图。

染色之后,我们可以从小的杨表入手,推导关系。如下图所示,我们可以发现,用左上角的两个单位杨图,可以以拼成任意白色和黑色个数相同的杨图,此时填充的骨牌数量即为白色格子数。在该类型图上,我们可以继续拓展,得到所有的杨图,若从一个该类型杨图拓展到目标图需要的格子最少,则可以证明拓展的部分不能再放骨牌(否则会产生新的单位杨图)。

因此,我们得出了结论,可以摆放的骨牌数等于单位杨图数量即黑白块中个数较少的块数

Codes

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define max_n 300100
void read(int &p)
{
p = 0;
int k = 1;
char c = getchar();
while (c < '0' || c > '9')
{
if (c == '-')
{
k = -1;
}
c = getchar();
}
while (c >= '0' && c <= '9')
{
p = p * 10 + c - '0';
c = getchar();
}
p *= k;
return;
}
void write_(int x)
{
if(x < 0)
{
putchar('-');
x = -x;
}
if(x>9)
{
write_(x/10);
}
putchar(x%10+'0');
}
void writesp(int x)
{
write_(x);
putchar(' ');
}
void writeln(int x)
{
write_(x);
putchar('\n');
}
int n,num;
int sum1,sum2;
signed main()
{
#if _clang_
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
read(n);
for(int i = 1;i<=n;i++)
{
read(num);
sum1 += num /2;
sum2 += num/2;
if(num%2 != 0)
{
if(i % 2 !=0)
{
sum1++;
}
else
{
sum2++;
}
}
}
writeln(min(sum1,sum2));
return 0;
}

最新文章

  1. switch与ifelse的效率问题
  2. SRM 146 DIV1 800
  3. Nginx反向代理到Tomcat服务器
  4. Python基础 - 获取N天前的日期
  5. a different object with the same identifier,同一个session中存在不同的对象问题
  6. HTTP状态码通常分为5种类型
  7. 整合apache+tomcat+keepalived实现高可用tomcat集群
  8. Javascript知识四(DOM)
  9. Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向
  10. ThreadLocal父子线程传递实现方案
  11. quartz部署出现找不到表的情况,错误提示: Table &#39;heart_beat.QRTZ_LOCKS&#39; doesn&#39;t exist
  12. windows 自动贴边
  13. 06 自学Aruba之win7系统802.1x认证网卡设置指导
  14. Vivado绑定外部verilog编辑器
  15. 微服务之springCloud-docker-feign配置(五)
  16. BZOJ1064 NOI2008假面舞会(dfs树)
  17. ICPC 2018 南京网络赛 J Magical Girl Haze(多层图最短路)
  18. linux python3获取ip地址
  19. MongoDB中的基础概念:Databases、Collections、Documents
  20. flask-login 学习(1)

热门文章

  1. ZROI2
  2. 系列化和反序列化的概述-对象的序列化_Object Output Stream类
  3. Win10下yolov8 tensorrt模型加速部署【实战】
  4. Grafana 系列文章(十):为什么应该使用 Loki
  5. Node.js学习笔记----day03
  6. FineUI通过js事件条用后台方法实现弹窗
  7. webrtc QOS笔记一 Neteq直方图算法浅读
  8. pycharm用不了pip
  9. 【KAWAKO】将conda虚拟环境设置进jupyter-notebook
  10. JSTL 报错 TagLibraryValidator