【题目分析】

其实直接状压就可以了。

但是有点闲,又写了一个可读性极差,智商低下,很(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);}
}

  

转载于:https://www.cnblogs.com/SfailSth/p/6435412.html

HDU 1565 方格取数(1) ——插头DP相关推荐

  1. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)

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

  2. hdu 1565 方格取数(1)(状态压缩dp)

    方格取数(1)                                                                 Time Limit: 10000/5000 MS (J ...

  3. HDU 1565 方格取数(简单状态压缩DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=1565 对于每一个数,取或者不取,用0表示不取,1表示取,那么对于每一行的状态,就可以用一个二进制的数来表示.比如 ...

  4. hdu 1565 方格取数(1)

    我用状态压缩做的. 一个有少于18000的合格状态,再DP 就好. #include<cstdio> #include<iostream> #include<cstrin ...

  5. hdu2167 方格取数 状态压缩dp

    题意:      方格取数,八个方向的限制. 思路:      八个方向的不能用最大流了,四个的可以,八个的不能抽象成二分图,所以目测只能用dp来跑,dp[i][j]表示的是第i行j状态的最优,具体看 ...

  6. 方格取数(多线程dp,深搜)

    https://www.luogu.org/problem/P1004 题目描述 设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): 某 ...

  7. 8786:方格取数 (多线程dp)

    [题目描述] 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点.在走 ...

  8. 洛谷 P1004 方格取数 【多线程DP/四维DP/】

    题目描述(https://www.luogu.org/problemnew/show/1004) 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0. ...

  9. 【动态规划】P1004 方格取数(四维dp模板题)

    与传纸条方法相同! 用f[i][j][k][l]表示第一个人走到(i,j),第二个人走到(k,l)的最优解 我们考虑两个人同时走,就相当于数字三角形. 状态转移方程为: f[i][j][k][l]=m ...

最新文章

  1. 暗渡陈仓:用低消耗设备进行破解和渗透测试1.2.2 渗透测试工具集
  2. 机器学习特征工程之连续变量离散化:等频分箱
  3. Caffe 中的卷积--权宜之计
  4. mysql 集群 备份_mysql cluster集群备份还原
  5. 一文读懂机器学习中的正则化
  6. [RabbitMQ]RabbitMQ原理与相关操作(一)
  7. getSystemService() in Android
  8. java method_JAVA Method的解析
  9. 圆平移后的方程变化_平移法解题
  10. php 126邮箱 联系人,php curl 获取 邮箱通讯录 126
  11. Conda activate报错 CommandNotFoundError: Your shell has not been properly configured to use ‘conda
  12. python中的yield使用详解
  13. iOS打包后收不到推送信息
  14. npm下载依赖失败并报错
  15. 吉比特H2-3光猫破解超级密码
  16. matlab 车牌汉字识别系统,基于MATLAB车牌自动识别系统设计毕业设计论文最新版...
  17. 摄影小白入门相机选择(个人出发)
  18. 51单片机 之 8*8 LED点阵(解决程序烧录没反应、显示拖影问题、取字模软件)
  19. 隧道应用(一)netsh端口映射内网
  20. 初级商业数字营销师直通车题库

热门文章

  1. 自学python清单-python学习清单
  2. python教程课后答案-python从入门到实践课后习题第八章
  3. python读文件操作-python文件操作读取文件写入文件
  4. LeetCode Design Twitter
  5. hdu1799 循环多少次?(组合递推公式的使用)
  6. Java 常用类 -Arrays
  7. python习题:修改文件里的内容
  8. argv[1] 路径问题
  9. 执行RF测试只生成output.xml文件,不生成log和report文件
  10. Hadoop 2.7.3 完全分布式维护-动态增加datanode篇