这里有状态压缩DP的好博文

题目:题目比较神,自己看题目吧

分析:

大概有两种思路:

1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过。

2.状压DP,先预处理出所有可以组成正方形的方案,根据题目的数据范围计算不会超过100个正方形方案。n个正方形用二进制的方式记录,每一位记录是否有没有引爆,则状态转移比较明显了。

#include <set>
#include <map>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;typedef long long ll;
typedef unsigned long long ull;#define debug puts("here")
#define rep(i,n) for(int i=0;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define REP(i,a,b) for(int i=a;i<=b;i++)
#define foreach(i,vec) for(unsigned i=0;i<vec.size();i++)
#define pb push_back
#define RD(n) scanf("%d",&n)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define RD4(x,y,z,w) scanf("%d%d%d%d",&x,&y,&z,&w)
#define All(vec) vec.begin(),vec.end()
#define MP make_pair
#define PII pair<int,int>
#define PQ priority_queue
#define cmax(x,y) x = max(x,y)
#define cmin(x,y) x = min(x,y)
#define Clear(x) memset(x,0,sizeof(x))
/*#pragma comment(linker, "/STACK:1024000000,1024000000")int size = 256 << 20; // 256MB
char *p = (char*)malloc(size) + size;
__asm__("movl %0, %%esp\n" :: "r"(p) );*/char IN;
bool NEG;
inline void Int(int &x){NEG = 0;while(!isdigit(IN=getchar()))if(IN=='-')NEG = 1;x = IN-'0';while(isdigit(IN=getchar()))x = x*10+IN-'0';if(NEG)x = -x;
}
inline void LL(ll &x){NEG = 0;while(!isdigit(IN=getchar()))if(IN=='-')NEG = 1;x = IN-'0';while(isdigit(IN=getchar()))x = x*10+IN-'0';if(NEG)x = -x;
}/******** program ********************/PII p[22];
int px[22],py[22];
int a[100],n;
int dp[2][1<<21];int main(){#ifndef ONLINE_JUDGEfreopen("sum.in","r",stdin);//freopen("sum.out","w",stdout);
#endifwhile(RD(n),~n){rep1(i,n)RD2(p[i].first,p[i].second);sort(p+1,p+n+1);rep1(i,n)px[i] = p[i].first , py[i] = p[i].second;int tp = 0;rep1(i,n) // 处理出所有可以组成的正方形REP(j,i+1,n)if(px[i]==px[j])REP(k,j+1,n)if(py[i]==py[k]||py[j]==py[k])REP(l,k+1,n)if(px[k]==px[l])if( (py[i]==py[k]&&py[j]==py[l])||(py[i]==py[l]&&py[j]==py[k]) )if( abs(px[i]-px[k])==abs(py[i]-py[j]) )a[++tp] = (1<<(i-1))|(1<<(j-1))|(1<<(k-1))|(1<<(l-1));Clear(dp);int all = 1<<n;int ans = 0;rep1(i,tp) // 状态压缩for(int sta=all-1;sta>=0;sta--){dp[i&1][sta] = dp[!(i&1)][sta];if( (a[i]&sta)!=a[i] )continue;cmax( dp[i&1][sta] , dp[!(i&1)][sta-a[i]]+4 );cmax(ans,dp[i&1][sta]);}cout<<ans<<endl;}return 0;
}

  

转载于:https://www.cnblogs.com/yejinru/p/3323233.html

hdu 4739 状压DP相关推荐

  1. hdu 1074 状压dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意:有n个作业,对于每一个作业有一个deadline,有一个完成这作业所需要的时间.如果超过d ...

  2. Travel(HDU 4284状压dp)

    题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...

  3. hdu 4640(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 思路:f[i][j]表示一个人状态i下走到j的最小花费,dp[i][j]表示i个人在状态j下的最 ...

  4. hdu 4539(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 思路:跟poj1185简直就是如出一辙! 1 #include<iostream> ...

  5. HDU 5045 状压DP 上海网赛

    比赛的时候想的是把n个n个的题目进行状压 但这样不能讲究顺序,当时精神面貌也不好,真是挫死了 其实此题的另一个角度就是一个n个数的排列,如果我对n个人进行状压,外面套一个按题目循序渐进的大循环,那么, ...

  6. hdu 4284(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4284 思路:类似于poj3311:http://poj.org/problem?id=3311,首先f ...

  7. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  8. HDU 4539郑厂长系列故事――排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 1 //#pragma ...

  9. HDU 5691 Sitting in Line 状压dp

    Sitting in Line 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5691 Description 度度熊是他同时代中最伟大的数学家,一切 ...

最新文章

  1. Spring + Struts + Hibernate联合开发(多对一关系)
  2. yii2 mysql save_Yii2 开发 MySQL 数据备份功能
  3. php where or,php – laravel中whereOr和orWhere之间的区别
  4. 百度初级认证有用吗_知乎“打败”了百度知道吗?
  5. Html TextArea 长度限制
  6. skynet源码阅读4--定时器实现
  7. 单分子荧光原位杂交(smFISH)
  8. 基于相似性网络融合的目标分类研究
  9. JAVA中简单图形界面的创建
  10. Skynet服务器框架系列教程,skynet 服务端框架安装/运行
  11. 华为防火墙实现双机热备配置详解
  12. 血泪史: k8s Initial timeout of 40s passed.
  13. 电信主机托管费用_电信托管服务器需要如何计费?
  14. 凹凸贴图(Bump Mapping)
  15. 互联网+下PDA移动智能手持POS超市收银开单软件
  16. PHP编写helloword,如何写第一个php程序——helloword
  17. 开篇 关于iOS越狱开发
  18. Shell sed编辑器
  19. Wintun:一款惊艳的 WireGuard 虚拟网卡接口驱动
  20. B端产品如何更清晰的理解业务

热门文章

  1. 我是一个内向的人,也是一个不善交际的人
  2. SELECT COUNT(*) 底层究竟干了啥么?
  3. Spring StateMachine,教你快速实现一个状态机
  4. 入职三天,公司给了100块钱叫我走人
  5. Redis 高可用特性之 “持久化” 详解
  6. 多线程:了解一下ForkJoin、FutureTask、BlockingQueue
  7. 【Scratch】青少年蓝桥杯_每日一题_4.19_考试成绩
  8. mysql 实时聚合分析_mysql滑动聚合/年初至今聚合原理与用法实例分析
  9. 如何用python进行量化交易_从零开始学习Python和量化交易
  10. 成功解决AttributeError: 'DataFrame' object has no attribute 'tolist'