HDU 1565 方格取数(1) ——插头DP
【题目分析】
其实直接状压就可以了。
但是有点闲,又写了一个可读性极差,智商低下,很(gou)好(pi)的代码

【代码】
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
int dp[2][1<<21],n,a[20][20];
void print(int x)
{F(i,0,n)printf("%d",(x>>i)&1);}
int main()
{
while (scanf("%d",&n)!=EOF)
{
if (!n){printf("0\n");continue;}
F(i,0,n-1) F(j,0,n-1) scanf("%d",&a[i][j]);
int now=1,pre=0;
memset(dp[now],0,sizeof dp[now]);
F(i,0,n-1)
F(j,0,n-1)
{
now^=1;pre^=1;
memset(dp[now],0,sizeof dp[now]);
F(s,0,(1<<(n+1))-1)
{
// print(s); printf(" is %d to",dp[pre][s]);
if ((!(s&(1<<j)))&&(!(s&(1<<(j+1))))) dp[now][s|(1<<j)|(1<<(j+1))]=max(dp[now][s|(1<<(j+1))|(1<<j)],dp[pre][s]+a[i][j]);
dp[now][s&(~(1<<j))&(~(1<<(j+1)))]=max(dp[now][s&(~(1<<j))&(~(1<<(j+1)))],dp[pre][s]);
// printf("\n");
}
if (j==n-1)
{
now^=1;pre^=1;
memset(dp[now],0,sizeof dp[now]);
F(s,0,(1<<(n+1))-1)
{
// print(s); printf(" --> "); print(((s<<1)&((1<<(n+1))-1))); printf("\n");
dp[now][((s<<1)&((1<<(n+1))-1))]=max(dp[pre][s],dp[now][((s<<1)&((1<<(n+1))-1))]);
}
}
// printf("\n");
}
int ans=0;
F(s,0,(1<<(n+1))-1) ans=max(ans,dp[now][s]);
printf("%d\n",ans);
}
}
HDU 1565 方格取数(1) ——插头DP的更多相关文章
- HDU 1565 方格取数(1) 轮廓线dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) ...
- HDU 1565 方格取数 状压dp
题目: 给你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大. Input 包括多 ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
- HDU 1565 - 方格取数(1) - [状压DP][网络流 - 最大点权独立集和最小点权覆盖集]
题目链接:https://cn.vjudge.net/problem/HDU-1565 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32 ...
- hdu 1565 方格取数(1) 状态压缩dp
方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hdu 1565 方格取数(1)(状态压缩dp)
方格取数(1) Time Limit: 10000/5000 MS (J ...
- HDU 1565 方格取数(简单状态压缩DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1565 对于每一个数,取或者不取,用0表示不取,1表示取,那么对于每一行的状态,就可以用一个二进制的数来表示.比如 ...
- HDU 1565 方格取数(1)(最大点权独立集)
http://acm.hdu.edu.cn/showproblem.php?pid=1565 题意: 给你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格 ...
- hdu - 1565 方格取数(1) && 1569 方格取数(2) (最大点权独立集)
http://acm.hdu.edu.cn/showproblem.php?pid=1565 两道题只是数据范围不同,都是求的最大点权独立集. 我们可以把下标之和为奇数的分成一个集合,把下标之和为偶数 ...
随机推荐
- inputStream 与 String 的互相转换
一. String 转换为InputStream String str = "String 与 inputStream转换"; InputStream ins1 = new Byt ...
- MySQL主从复制原理介绍
1)在mysql主库上,将改变记录到二进制日志(binary log)中. 2)在mysql从库上,IO线程将mysql主库上二进制日志(binary log)复制到中继日志(replay log)中 ...
- vertx从入门到精通
1.Vert.x安装指南 http://blog.csdn.net/sdyy321/article/details/38926005 http://blog.csdn.net/chszs/articl ...
- (一)SpringMVC之警告: No mapping found for HTTP request with URI
这个警告往往是因为url路径不正确. 所以从三个地方下手: 1.springmvc-config.xml中的配置handle,看看是不是因为handle没有配置导致的. 2.如果是使用注解的方式的话, ...
- 复合词UVa10391(STL简单应用)
一.题目 输入一系列由小写字母组成的单词.输入已按照字典序排序(这句话就是个陷阱),且不超过120000个.找出所有的复合词,即恰好由两个单词连接而成的单词. 二.解题思路 要么枚举两两拼接的情况,O ...
- Hopfield 网络(上)
讲的什么 这部分主要对 Hopfield 网络作一大概的介绍.写了其模型结构.能量函数和网络的动作方式.主要参考了网上搜到的一些相关 PPT. 概述 早在 1982 年,Hopfield 发表的文 ...
- sha1、base64、ase加密
<!DOCTYPE html><html><head><title>sha1.base64.ase加密</title><meta ch ...
- python基础知识14-正则表达式
1.正则表达式 正则可以代替其他任何工具,但是其他工具不能完全代替正则. 1.匹配或提取字符串的工具,基于所有语言之上的工具. 正则表达式所面向的问题 判断一个字符串是否匹配给定的格式,如判断用户注册 ...
- Day08字符编码
Day08: 知识储备: 硬盘:由硬盘加载到内存,cpu从内存中取 软件产生的数据都是先保存在内存中 文件,输入文字,保存到内存,内存是硬件,硬件只能保存2进制,所以需要转换 文本编辑器,输入文字的时 ...
- 查看zookeeper管理的solrcloud配置文件
进入zookeeper/bin目录下 连接zookeeper sh zkCli.sh -server localhost:2181 查看 ls /configs 结果如下 [zk: localhost ...