题意:

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

思路:

     八个方向的不能用最大流了,四个的可以,八个的不能抽象成二分图,所以目测只能
用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. 剑指 Offer 60. n个骰子的点数 + 动态规划 + 空间优化

    剑指 Offer 60. n个骰子的点数 Offer_60 题目详情 题解分析 package com.walegarrett.offer; /** * @Author WaleGarrett * @ ...

  2. 关于python中的[::-1],[:,:,::-1]的反转理解

    其实就是单纯的关于反转,我们只需要记住每一个列表的中间有两个冒号: 即[a: b:c],意思是从a到b,间隔是c,因为经常省略c,所以经常看到[a:b]. 一.在一维数据中的反转 import num ...

  3. 2020年12月-第02阶段-前端基础-CSS Day07

    CSS Day07 CSS高级技巧 理解 能说出元素显示隐藏最常见的写法 能说出精灵图产生的目的 能说出去除图片底侧空白缝隙的方法 应用 能写出最常见的鼠标样式 能使用精灵图技术 能用滑动门做导航栏案 ...

  4. JS table排序

    <html lang="en"> <head> <meta charset="UTF-8"> <meta http-e ...

  5. 比较String 字符串的字节大小

    package com.ittx.edi.erp;import java.io.File;import java.io.FileWriter;import java.io.IOException;pu ...

  6. WebSocket与即时通讯

    HTTP 协议有一个缺陷:通信只能由客户端发起!HTTP 协议做不到服务器主动向客户端推送信息.这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦.我们只能使用"轮 ...

  7. Learn Python the Hard Way,ex37-2

    本练习为复习python的符号和关键字 数据类型有:True False None Strings numbers floats lists dict tuple set ""&q ...

  8. Spring如何解决循环依赖

    一.什么是循环依赖 多个bean之间相互依赖,形成了一个闭环. 比如:A依赖于B.B依赖于c.c依赖于A 通常来说,如果问spring容器内部如何解决循环依赖, 一定是指默认的单例Bean中,属性互相 ...

  9. Nacos 2.0 正式发布,性能提升 10 倍!!

    3月20号,Nacos 2.0.0 正式发布了! Nacos 简介: 一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. 通俗点讲,Nacos 就是一把微服务双刃剑:注册中心 + 配置中 ...

  10. 用DeBug的方式,带你掌握HBase文件在Snapshot的各种变化

    摘要:掌握Snapshot可以帮助我们很好的完成HBase数据备份和数据迁移的工作. 简介 HBase的Snapshot功能可以在不复制数据的情况下,快速克隆一张表,完成一次数据备份.通过Snapsh ...