题意:

你一个n*n的格子的棋盘,每个格子里面有一个非负数。
从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。(n <= 20)

算法:

因为n比较少20,可以用状态压缩,1表示方格该数取,0表示不取。

每一行的状态有1<<N种,先预处理所有合法状态,即相邻两位不能为1,

判断条件是i && (i<<1),下一行的状态要满足条件的是跟上一行没有相

邻的 num[i] & num[j] == 0

int num[21000]; //状态
int sum[21][21000]; //该状态的和
int len;
int mt[30][30]; //存储方格

View Code

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int num[21000]; //状态
int sum[21][21000]; //该状态的和
int len;
int mt[30][30];  //存储方格
int N;
int dp[30][21000];void pre(int N)
{ len = 0;for( int i = 0; i < (1<<N); i++){if( i & (i<<1) )continue;num[len] = i;for( int k = 1; k <= N; k++){int ans = i;for( int j = N; j > 0; j--){if( ans&1 ){sum[k][len] += mt[k][j];}ans = ans>>1;  }}len++;}
}int main( )
{while( scanf("%d",&N) != EOF){memset(sum, 0, sizeof(sum));for( int i = 1; i <= N; i++)for( int j = 1; j <= N; j++)scanf("%d",&mt[i][j]);      pre( N );memset(dp, 0, sizeof(dp));dp[0][0] = 0;for( int n = 1; n <= N; n++)for( int i = 0; i < len; i++)for( int j = 0; j < len; j++){if(  (num[i]&num[j]) == 0 ){if( dp[n][i] < dp[n-1][j] + sum[n][i] ){dp[n][i] = dp[n-1][j] + sum[n][i];    }     }     }int ans = 0;for( int i = 0; i < len; i++)if( dp[N][i] > ans )ans = dp[N][i];printf("%d\n", ans);}    return 0;
}

转载于:https://www.cnblogs.com/tangcong/archive/2012/08/05/2623606.html

HDU 1565 状态压缩相关推荐

  1. hdu 5067(状态压缩dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 解题思路:这道题开始想复杂了,想用bfs去求出最短距离,其实没必要,因为题目中没有阻碍关系,所以 ...

  2. HDU 1693(状态压缩 插头DP)

    我们引用国家队2008年陈丹琦的大作--<基于连通性状态压缩的动态规划问题>,上面对于插头.轮廓线的概念有详细的解释,不再赘述. 我们使用一个三维数组,前两维表示所在的格子,后一维表示轮廓 ...

  3. hdu 5434(状态压缩+矩阵优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5434 官方题解: 这个题用状态转移得到矩阵,再矩阵快速幂就可以了. 合体象的攻击范围是变少了的,我们可 ...

  4. hdu 5713(状态压缩DP)

    要进行两次dp, 第一个,dp[i],1<=i<=(1<<n) 其中用i的二进制形式表示已选择的点. dp[i] 用来保存i中的点构成一个连通块,边集多少种可能. 转移方程: ...

  5. HDU 1074 Doing Homework【状态压缩DP】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...

  6. 点分治问题 ----------- HDU 5977 or 2016年大连ICPC [点分治+状态压缩]

    题目链接 题目大意: 就是给你一颗树,树上有各种权值,权值只有K种k∈[1,10]K种k\in[1,10]K种k∈[1,10],问你有多少路径覆盖了这KKK种权值,n∈[1,5e4]n\in[1,5e ...

  7. HDU 4352 数位dp + LIS(nlogn) + 状态压缩

    #define xhxj (Xin Hang senior sister(学姐))  If you do not know xhxj, then carefully reading the entir ...

  8. hdu 3006(状态压缩)

    题意:给一些集合,取一部分集合合并能够得到多少个新集合. 解题思路:这道题数字最多只有14,可以用状态压缩去做,每一位代表某个数,0代表不取,1代表取这个数.剩下的就是去模拟状态了.不多讲,输入状态压 ...

  9. hdu 3681(bfs+dfs+状态压缩)

    解题思路:这道题属于图上来回走的问题,可以把重复走的过程弱化,即只强调从u->v的结果,中间经过的节点都不考虑.这道题里面'G','F','Y'是重要的节点,其余的点我们是可以忽略的,也就是说, ...

最新文章

  1. 南通市公积金信息系统goldengate复制软件采购
  2. 向DataTable中添加自定义的行
  3. JavaScript-Array操作
  4. matlab目标支持包安装问题,配置系统目标文件 - MATLAB Simulink - MathWorks 中国
  5. ubuntu学习命令
  6. 中科曙光服务器怎么装系统_如何给服务器装系统
  7. 国内MCU厂商也开始卷了
  8. elasticsearch-7.15.2 同时支持中文ik分词器和pinyin分词器
  9. python的迭代器_python迭代器详解
  10. 深度学习之目标检测 第4章 深度学习目标检测方法
  11. 【转】python eval
  12. python基础知识学完之后再如何学_已学完 Python 基础知识,应该如何继续提升算法能力,以及如何过渡到机器学习?...
  13. 修复Ubuntu系统安装steam无法打开
  14. vim写python时:line 1: syntax error near unexpected token
  15. 创建一个闪亮的应用程序以使用rtweet和R搜索Twitter
  16. 比尔·盖茨表示 AI应被用来改善教育医疗
  17. 曹雪芹诗歌中的鸿蒙,曹雪芹诗词选
  18. 用HTML和css写的界面适应手机界面小结
  19. pr学习心得(入门篇)
  20. c# 使用百度通用翻译api DEMO 报错

热门文章

  1. Java中的数据类型及相互转换方法
  2. Theano2.1.6-基础知识之在thenao中的求导
  3. Solr Facet 查询
  4. 编辑器Sublime Text 2
  5. Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题
  6. kaggle为什么总是难以拿到金牌
  7. flink背压问题处理(还没弄完)
  8. xfce4截图的快捷键设置
  9. win7-64安裝virtualpc
  10. 机器学习(十)——因子分析