[AGC008C] Tetromino Tiling——题解

这道题其实是一道思维题,我们分别用 IIIOOOTTTJJJLLLSSSZZZ 表示下图的七个图形。

我们不难发现图形 TTTSSSZZZ 要是和其它的图形组成的话必定会剩下单独一个空格,而题目要求宽是为 222。所以如果选了图形 TTTSSSZZZ,填到最后便无法填充,那我们就不考虑图形 TTTSSSZZZ

接着我们再来看图形 OOO,因为图形 OOO 不管怎样都是可以全部选上的,所以我们让 ansansans 加上 图形 OOO 的数量。

我们排除这些特殊的图形后,就只剩下图形 JJJIIILLL。我们可以发现利用这三个图形有两种组成的方法,第一种是用两个 JJJ、两个 III 或两个 LLL 组成的 2×42\times 42×4 的长方形,如下图:

而另一种方法则是图形 J,I,LJ,I,LJ,I,L 各用一个组成的 2×62\times 62×6 的长方形,如下图:

我们再让 ansansans 加上这两个中的最大值就行了。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int I,O,T,J,L,S,Z,ans;
signed main()
{
	cin>>I>>O>>T>>J>>L>>S>>Z;//输入各个图形的数量
	ans=max(I/2*2+J/2*2+L/2*2,I>0&&J>0&&L>0?(I-1)/2*2+(J-1)/2*2+(L-1)/2*2+3:0);//求两种方案的最优解
	cout<<O+ans<<endl;//注意:一定不要忘记加上图形O的数量
	return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值