题意:

     方格取数,八个方向的限制。

思路:

     八个方向的不能用最大流了,四个的可以,八个的不能抽象成二分图,所以目测只能
用dp来跑,dp[i][j]表示的是第i行j状态的最优,具体看代码。

#include<stdio.h>

#include<string.h>

int dp[16][1<<15];

int map[16][16];

int zt[1<<15];

int maxx(int x ,int y)

{

    return x > y ? x : y;

}

int DP(int n)

{

    int mk = 0;

    for(int i = 0 ;i < (1<<n) ;i ++)

    if((i & (i << 1)) == 0 ) zt[++mk] = i;

   

    memset(dp ,0 ,sizeof(dp));

    for(int i = 1 ;i <= n ;i ++)

    for(int j = 1 ;j <= mk ;j ++)

    {

        int sum = 0;

        for(int k = 1 ;k <= n ;k ++)

        if(zt[j] & (1 << (k - 1))) sum += map[i][k];

        dp[i][j] = sum;

        for(int k = 1 ;k <= mk ;k ++)

        {

           if(zt[j] & zt[k]) continue;

           if(zt[j] & zt[k]<<1) continue;

           if(zt[j] & zt[k]>>1) continue;

           dp[i][j] = maxx(dp[i][j] ,dp[i-1][k] + sum);

        }

     }

     int Ans = 0;

     for(int i = 1 ;i <= mk ;i ++)

     Ans = maxx(Ans ,dp[n][i]);

     return Ans;

}

int main ()

{

    int n ,i ,j ,nowid;

    while(~scanf("%d" ,&map[1][1]))

    {

       nowid = 1;

       while(1)

       {

           scanf("%d" ,&map[1][++nowid]);

           if(getchar() == '\n') break;

       }

       n = nowid;

       for(i = 2 ;i <= n ;i ++)

       for(j = 1 ;j <= n ;j ++)

       scanf("%d" ,&map[i][j]);

       printf("%d\n" ,DP(n));

    }

    return 0;

}

hdu2167 方格取数 状态压缩dp的更多相关文章

  1. tyvj 1884 [NOIP2000T4]方格取数 || codevs 1043 dp

    P1884 [NOIP2000T4]方格取数 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 [noip2000T4]方格取数 描述 设有N*N的方格图(N& ...

  2. HDU 1565 方格取数(1) 轮廓线dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) ...

  3. codevs_1043 方格取数(棋盘DP)

    1043 方格取数 2000年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description ...

  4. HRBUST - 1214 NOIP2000提高组 方格取数(多线程dp)

    方格取数 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放人数字0.如下图所示(见样例 ,黄色和蓝色分别为两次走的路线,其中绿色的格子为黄色和蓝色共同走过的 ...

  5. P1004 方格取数(四维dp)

    P1004 方格取数 思路如下 这题是看洛谷大佬的思路才写出来的,所以我会把大佬的思路展示如下: 1⃣️:我们可以找到一个叫思维dp的东西,dp[i][j][k][l],其中前两维表示一个人从原点出发 ...

  6. P1004 方格取数——奇怪的dp

    P1004 方格取数 题目描述 设有 \(N\times N\) 的方格图 \((N\leq 20)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 \(0\) .如下图所示(见样例) ...

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

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

  8. 洛谷 P1004 方格取数 【多进程dp】

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

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

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

随机推荐

  1. bouncycastle中添加HMAC-SM3支持

    一. 最近看完了PKCS#5中的内容,总结一下自己添加HMAC-SM3中遇到的问题和解决方法. 大概通读BC java源码以后,开始上手修改. 在SM3.java中添加如下代码: /** * SM3 ...

  2. windows 下使用vargant 搭建虚拟机服务

    使用vagrant 下载 vagrant[https://www.vagrantup.com/downloads.html] 下载管理工具VirtualBox[https://www.virtualb ...

  3. 不一样的软件们——GitHub 热点速览 v.21.10

    作者:HelloGitHub-小鱼干 创意,是程序员的一个身份代名词,一样的软件有不一样的玩法.比如,你可以像用 git 一样操作一个 SQL 数据库,dolt 就是这样的数据库.又比如,你可以只写文 ...

  4. [BJWC2018] Kakuro

    一.题目 点此看题 二.解法 我一开始一直想不出来,直接刚这个题实在是太复杂了,因为一开始就是不合法的. 下次遇到复杂的题一定要想 调整法 ,我再不往这个方向想我吔屎 好了言归正传,我们先找一组可行的 ...

  5. [WC2014]时空穿梭

    这才叫莫比乌斯反演题. 一.题目 点此看题 二.解法 也没有什么好的思路,我们不妨把暴力柿子写出来,我们想枚举直线,但是这道题不能枚举直线的斜率,所以就要用整数来表示直线,我们不妨枚举出发点和终止点的 ...

  6. 搭建zabbix服务1

    环境准备: 静态ip 主机名 各自配置好主机名 # hostnamectl set-hostname --static zabbixserver.cluster.com 三台都互相绑定IP与主机名 # ...

  7. 锁与同步器的基础--AQS

    什么是AQS AQS全名AbstractQueueSynchronizer,可以翻译为抽象队列同步器 Abstract--说明该类需要被继承,提供实现的框架和一些必要的功能 事实上,AQS也的确提供了 ...

  8. PTA 两个有序链表序列的合并

    6-5 两个有序链表序列的合并 (15 分)   本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L ...

  9. 获取本机外网ip

    获取内网ip ifconfig eth0 | grep 'inet'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $2}' 获取公网ip ifc ...

  10. 【SqlServer】管理全文索引(FULL TEXT INDEX)

    Sql Server中的全文索引(下面统一使用FULLTEXT INDEX来表示全文索引),是一种特定语言搜索索引功能.它和LIKE的不一样,LIKE主要是根据搜索模板搜索数据,它的效率比FULLTE ...