【BZOJ3901】棋盘游戏 局部暴枚取优

链接:

#include <stdio.h>
int main()
{
    puts("转载请注明出处[vmurder]谢谢");
    puts("网址:blog.csdn.net/vmurder/article/details/44793957");
}

~~~

貌似是wyfcyx以前出过的题?

题解:

那个首先暴力的话并不是O(217),而是O(217?17)。

然后我们分析怎么过此题。

首先我们发现其实搜索的话,有好几部分都是独立的。

发现所有的方形都经过中间一行,所以我们可以先O(217)枚举中间一行左边一半的取反状态,然后右边的一半可以递推出来,有点像异或前缀和,看代码吧。

然后对每一列O(217)处理,时间复杂度差不多了,但是还是挂的。

我们发现还能拆。

我们对每一行进行处理,这样就可以不决定中间一列,只决定中间一点的取反与否。

然后枚举行内每个点,看它状态,这样把每一行的每一对点的决策最优值加到中间一点取反与否的两个函数值上,最后再把函数值取优返还给这一列的决策(思想上),整列就是当前枚举集合的最优答案。

所有最优答案中的最优就是全局最优答案。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 35
using namespace std;
int a[N][N],n,m,ans;
bool v[N]; // 表示翻转1,不翻转0
int main()
{
    freopen("test.in","r",stdin);

    int i,j,k;

    scanf("%d",&n),m=n+1>>1;
    for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%d",&a[i][j]);

    for(int S=(1<<m)-1;~S;S--)
    {
        int sum=0;
        for(i=1;i<=m;i++)
        {
            v[i]=(S>>i-1)&1;
            if(v[i])sum-=a[m][i];
            else sum+=a[m][i];
        }
        for(i=m+1;i<=n;i++)
        {
            v[i]=v[m]^v[i-m];
            if(v[i])sum-=a[m][i];
            else sum+=a[m][i];
        }

        for(i=1;i<m;i++)
        {
            int x=-a[i][m],y=a[i][m]; // x翻转,y不翻转
            if(v[m])x+=a[i+m][m],y-=a[i+m][m];
            else x-=a[i+m][m],y+=a[i+m][m];

            for(j=1;j<m;j++)
            {
                int p,q;
                if(v[j])
                {
                    p=-a[i][j]+a[i][j+m]+a[i+m][j];
                    q=-a[i][j]-a[i][j+m]+a[i+m][j];
                    if(v[m])p+=a[i+m][j+m],q-=a[i+m][j+m];
                    else p-=a[i+m][j+m],q+=a[i+m][j+m];
                    p=max(p,-p),q=max(q,-q); // 很巧,,
                }
                else
                {
                    p=-a[i][j]+a[i][j+m]-a[i+m][j];
                    q=-a[i][j]-a[i][j+m]-a[i+m][j];
                    if(v[m])p-=a[i+m][j+m],q+=a[i+m][j+m];
                    else p+=a[i+m][j+m],q-=a[i+m][j+m];
                    p=max(p,-p),q=max(q,-q);
                }
                x+=p,y+=q;
            }
            sum+=max(x,y);
        }
        ans=max(ans,sum);
    }
    cout<<ans<<endl;
    return 0;
}
时间: 2024-10-12 12:32:23

【BZOJ3901】棋盘游戏 局部暴枚取优的相关文章

用 Java 抓取优酷、土豆等视频

1. [代码][JavaScript]代码  import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements; /*** 视频工具类* @author sunlightcs* 2011-4-6* http://hi.juziku.com/sunlightcs/*/public class VideoUtil {       

poj3080 Blue Jeans(暴枚+kmp)

Description The Genographic Project is a research partnership between IBM and The National Geographic Society that is analyzing DNA from hundreds of thousands of contributors to map how the Earth was populated.  As an IBM researcher, you have been ta

java平台利用jsoup开发包,抓取优酷视频播放地址与图片地址等信息。

/******************************************************************************************** * author:[email protected]大钟 * E-mail:[email protected] * http://blog.csdn.net/conowen * 注:本文为原创.仅作为学习交流使用,转载请标明作者及出处. *************************************

selenium爬取优酷页面并下载图片

1 from selenium import webdriver 2 import requests 3 driver = webdriver.Chrome() 4 #打开优酷 5 driver.get("http://www.youku.com") 6 #点开优酷片库 7 driver.find_element_by_xpath("//*[@id='m_2544']/div/ul/li[6]/span[1]/a").click() 8 #获取所有img元素 9 l

Httpclient爬取优酷网

参考:http://www.cnblogs.com/lchzls/p/6277210.html /httpClient/src/main/java/com/louis/youku/Page.java /** * Project Name:httpClient * File Name:Page.java * Package Name:com.louis.youku * Date:2017年11月9日上午9:11:28 * Copyright (c) 2017, [email protected]

接着上次的python爬虫,今天进阶一哈,局部解析爬取网页数据

*解析网页数据的仓库 用Beatifulsoup基于lxml包lxml包基于html和xml的标记语言的解析包.可以去解析网页的内容,把我们想要的提取出来. 第一步.导入两个包,项目中必须包含beautifulsoup4和lxml 第二步.先去获取网页的数据 def get_html(): url="http://www.scetc.net" response=request.get(url) response.encoding="UTF-8" return res

Python登录豆瓣并爬取影评

上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置.主题等) 浏览器行为跟踪(如跟踪分析用户行为等) 我们今天就用requests库来登录豆瓣然后爬取影评为例子,用代码讲解下Cookie的会话状态管理(登录)功能. 此教程仅用于学习,不得商业获利!如有侵害任何公司利益,请告知删除! 一.需求背景 之前猪哥带大家爬取了优酷的弹幕并生成词云图片

BZOJ1951 [Sdoi2010]古代猪文

本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! 题目链接:BZOJ1951 正解:中国剩余定理+费马小定理+$Lucas$定理 解题报告: 这道题可以说是数论+组合大综合题- 题目求的是$\sum_{d|n} g^{C_n^d}$,模数$p$是质数(特判$g=p!$),根据费马小定理,我们可以把幂上的数

目前所有的ANN神经网络算法大全

http://blog.sina.com.cn/s/blog_98238f850102w7ik.html 目前所有的ANN神经网络算法大全 (2016-01-20 10:34:17) 转载▼ 标签: it   概述 1 BP神经网络 1.1 主要功能 1.2 优点及其局限性 2 RBF(径向基)神经网络 2.1 主要功能 2.2 优点及其局限性 3 感知器神经网络 3.1 主要功能 3.2 优点及其局限性 4 线性神经网络 4.1 主要功能 4.2优点及其局限性 5自组织神经网络 5.1 自组织