给一个n×n的01矩阵,你的任务是将尽量少的0变成1,是的每个元素的上下左右的位置(如果存在的话)的之和均为偶数。1<=n<=15.

如果暴力整个矩阵,那么时间复杂度是O(2^(n*n)) 。

其实,我们只需要暴力第一行就行了, 只要第一行确定了, 那么为了让第一行满足性质,那么第二行的元素的值也随之确定,那么第三,第。。。。也是。

那么时间复杂度是O((2^n ) * n*n).

挺多的开关问题有这样的性质,只要第一行或者第一个确定了, 那么随后的也就确定了。

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = ;
const int INF = <<;
int dx[] = {,,-};
int dy[] = {-,,};
int a[N][N];
int tmp[N][N];
int ans;
int getSum(int x, int y, int n)
{
int ret = ;
for(int i=;i<;++i)
{
int tx = x + dx[i];
int ty = y + dy[i];
if(tx>= && tx<=n && ty>= && ty<=n)
ret += tmp[tx][ty];
}
return ret;
}
int check(int s, int n)
{
for(int i=;i<=n;++i)
{
tmp[][i] = s&;
if(tmp[][i]== && a[][i]==)
return INF;
s>>=;
}
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)
{
int ret = getSum(i-,j,n);
tmp[i][j] = ret & ;
if(tmp[i][j]== && a[i][j]==)
return INF;
}
}
int cnt = ;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
cnt += a[i][j] != tmp[i][j];
return cnt;
}
int main()
{
int t,n;
scanf("%d",&t);
for(int cas=;cas<=t;++cas)
{
scanf("%d",&n);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
scanf("%d",&a[i][j]);
ans = INF;
for(int s=;s<=(<<n)-;++s)
{
ans = min(ans,check(s,n));
}
if(ans==INF)
printf("Case %d: %d\n",cas, -);
else
printf("Case %d: %d\n",cas ,ans);
}
return ;
}

Uva11464 开关问题的更多相关文章

  1. 手游聚合SDK开发之远程开关---渠道登入白名单

    白名单有啥好说的呢?无非就是筛选登入,大家第一眼看到就是这个印象,白名单也是有文章的,弄的时机不同会给你带来很不错的收益,注意是收益.还是举例来说,游戏上线前渠道都会做一个预下载,一般提前1-2天,这 ...

  2. TYPESDK手游聚合SDK客户端远程开关:渠道支付黑名单

    渠道支付要做开关干嘛用呢?为什么要做这种东西呢? 这个教训来分享一下,我们的游戏上线公测了,59个渠道首发,其中包括了应用宝,UC,360等的大渠道,也包含有一些工会渠道和小渠道,上线后一切正常,但是 ...

  3. iOS系列 基础篇 09 开关、滑块和分段控件

    iOS系列 基础篇 09 开关.滑块和分段控件 目录: 案例说明 开关控件Switch 滑块控件Slider 分段控件Segmented Control 1. 案例说明 开关控件(Switch).滑块 ...

  4. Context值和bool开关

      Context值和bool开关的相关内容 Context值分为2种 系统默认的context值 服务的context值 Context值的作用 主要是防止有未知文件进入目录文件之中(如将病毒拷贝到 ...

  5. 多线程、委托、Invoke解决winform界面卡死的问题,并带开关

    一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...

  6. 替代jquery1.9版本以前的toggle事件函数(开关)

    以上文章为转载自http://blog.sina.com.cn/s/blog_50042fab0101c7a9.html var flag=1; $(".selector").cl ...

  7. Android自定义控件7--自定义开关--绘制界面内容

    本文实现全自定义控件--自定义开关 本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址. 自定义开关 (View),本文完成下面内 ...

  8. .NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)

    阅读目录: 1.背景介绍 2.在业务层中加入核心领域模型(引入DomainModel,让逻辑.数据有家可归,变成一个完整的业务对象) 3.统一协调层Application Layer(加入协调层来转换 ...

  9. asp.net mvc后台操作之读写xml控制首页动态页面开关显示

    一.背景 在asp.net mvc项目里,用户需要开拓几个活动版面,并以侧栏的方式呈现在首页右侧,几个活动时间不一致,为避免浏览者在活动未开放之时进入未开放的服务页面.因此不仅需要在活动代码中加入限制 ...

随机推荐

  1. alv 显示 汇总数据

    alv中有 字段设置 gs_fieldcat-do_sum = ‘1’.字段  用于控制汇总

  2. Webcast / 技术小视频制作方法——自己动手录制video轻松搞定

    Webcast / 技术小视频制作方法——自己动手录制video轻松搞定 http://blog.sina.com.cn/s/blog_67d387490100wdnh.html 最近申请加入MSP的 ...

  3. Qt Windows下开机自动启动自己的程序

    源地址:http://blog.csdn.net/chrisfxs/article/details/13279491 版权声明:本文为博主原创文章,未经博主允许不得转载. void Widget::R ...

  4. MongoDB查询命令具体解释

    1.查询全部记录 复制代码代码例如以下: db.userInfo.find(); 相当于:select* from userInfo; 默认每页显示20条记录,当显示不下的情况下,能够用it迭代命令查 ...

  5. hdu 1530 Maximum Clique

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1530 题目分类:最大团问题 DP + DFS 代码: #include<bits/stdc++. ...

  6. [Network]Wireless and Mobile

    Wireless 1 Introduction 1.1 Elements 1. Wireless Hosts Wireless does not mean mobility. 2. Base Stat ...

  7. 使用xml和java代码混合控制UI界面

    main.xml.................... <?xml version="1.0" encoding="utf-8"?> <Li ...

  8. 第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍

    参考:http://developer.android.com/guide/components/tasks-and-back-stack.html 在Android中,一个应用程序里面,通常包含了多 ...

  9. ASA IPSEC VPN配置

    ASA-1配置 : Saved:ASA Version 8.0(2) !hostname ASA-1enable password 8Ry2YjIyt7RRXU24 encryptednames!in ...

  10. oschina 手机/移动开发

    手机/移动开发 Android UI 组件(167) React Native 相关(8) 网站客户端(16) NativeScript 插件(18) iPhone/iPad开发工具(16) WP7开 ...