OpenJudge1793:矩形覆盖

该博客主要介绍了OpenJudge1793题目的解决方案,利用了状态压缩动态规划(状压DP)的方法。文章提到,状态转移分为两种情况:一是当前集合由两个不相交的集合构成(O(3^n)),二是当前集合由一个相交集合形成,其中只有一点重合,并且不重合的点也只有一个。建议读者通过画图辅助理解。
摘要由CSDN通过智能技术生成

解法:状压dp,状态转移有2种

①:当前集合从2个不相交的集合得来O(3^n)

②:当前集合从相交的集合得来,但只有一个点重合,且不重合的点也只有一个,纸上画一下就知道。

#include"bits/stdc++.h"
using namespace std;
const int inf = 0x3f3f3f3f;
struct point{
    int x,y;
    point(){}
    point(int x, int y):x(x),y(y){}
}p[17];
int f[1<<15];
int main()
{
#ifdef __LOCAL__
    freopen("stdin1.txt","r",stdin);
#endif // __LOCAL__
    int n;
    while(~scanf("%d",&n)){
        if(n == 0) break;
        memset(f,inf,sizeof(f));
        for(int i = 1; i <= n; i++){
            scanf("%d%d",&p[i].x,&p[i].y);
        }
        int S = 1<<n;
        for(int sta = 0; sta < S; sta++){
            int cnt = 0, u = -inf, d = inf, l = inf, r = -inf;
            for(int i = 1; i <= n; i++) if(sta&(1<<(i-1))){
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值