[Coci2015]Stanovi解题报告

这篇博客介绍了Coci2015的Stanovi问题的解题报告,重点在于理解如何利用动态规划(DP)解决矩形分割问题。结论指出,合法的分割方案使得大矩形(a,b)能被一条直线平分,且无小矩形边界跨过此直线。解释了这是因为小矩形边界源于大矩形且不能形成环状。定义f(n,m,l,r,u,d)为n*m矩形的状态,并枚举分割方式,考虑对称性简化计算。" 122933401,8578963,Vue.js音频播放器组件实现,"['前端开发', 'Vue', 'HTML5音频', 'UI设计', 'javascript']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结论:一个合法的分割方案必然导致矩形(a,b)可以被一条直线分成两半,且不存在一个内部小矩形的边界是跨过这条直线的。
这是为什么呢?因为每个小矩形的边界必然是从大矩形的边界中出来的,而如果我们阻止它横穿矩形,就必须要启用一条新的小边。而且这些小边是不能互相阻止的,因为假如互相阻止,那么就形成了一个环,这显然是非法的。所以必然有一条边会横穿大矩形。
——来自鸟哥的讲解

所以我们就可以考虑dp了,设f(n,m,l,r,u,d)表示n*m的矩形其左、右、上、下边界是否还在,然后枚举把它劈成哪两半。注意对称情况记成一次,即约定nm,lr,ud

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
int f[305][305][2][2][2][2];
LL k;
int query(int n,int m,int l,int r,int u,int d){
    if(n>m){
        swap(n,m);
        swap(l,u),swap(r,d);
    }
    if(l>r)swap(l,r);
    if(d>u)swap(u,d);
    if(f[n][m][l][r][u][d]==-1){
        f[n][m][l][r][u][d]=min(0x7fffffffLL,(n*m-k)*(n*m-k));
        if(u||d||l&&r)
            for(int y=1;y<m;++y)    
                f[n][m][l][r][u][d]=min(f[n][m][l][r][u][d],query(n,y,l,0,u,d)+query(n,m-y,0,r,u,d));
        if(l||r||u&&d)
            for(int x=1;x<n;++x)
                f[n][m][l][r][u][d]=min(f[n][m][l][r][u][d],query(x,m,l,r,0,d)+query(n-x,m,l,r,u,0));
    }
    return f[n][m][l][r][u][d];
}
#include<cstring>
int main(){
    //freopen("bzoj_3810.out","w",stdout);
    freopen("bzoj_3810.in","r",stdin);
    int n,m;
    cin>>n>>m>>k;
    memset(f,-1,sizeof(f));
    cout<<query(n,m,1,1,1,1);
    /*for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            for(int l=2;l--;)
                for(int r=2;r--;)
                    for(int u=2;u--;)
                        for(int d=2;d--;)
                            if(f[n][m][l][r][u][d]>1e9)
                                puts("!");*/
}

总结:
考虑矩形问题时,可以从其能否分治来考虑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值