POJ 1681 Painter's Problem 【高斯消元 二进制枚举】

高斯消元法(二):高斯消元法原理 高斯消去法是一种常用的求解线性方程组的方法,通过逐次消元后,在回代求解,实际计算中常用的一种方法。 顺序消去法 将Ax=b按照从上至下、从左至右的顺序化为上三角方程组,中间过程不对矩阵进行交换,主要步骤如下。 STEP1: 将第2行至第n行,每行分别与第一行做运算,消掉每行第一个参数。公式如: 形成如下图所示新矩阵: STEP2: 从新矩阵的a22开始 阅读详情

任意门:http://poj.org/problem?id=1681

Painter's Problem
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 7667 Accepted: 3624

Description

There is a square wall which is made of n*n small square bricks. Some bricks are white while some bricks are yellow. Bob is a painter and he wants to paint all the bricks yellow. But there is something wrong with Bob's brush. Once he uses this brush to paint brick (i, j), the bricks at (i, j), (i-1, j), (i+1, j), (i, j-1) and (i, j+1) all change their color. Your task is to find the minimum number of bricks Bob should paint in order to make all the bricks yellow. 

Input

The first line contains a single integer t (1 <= t <= 20) that indicates the number of test cases. Then follow the t cases. Each test case begins with a line contains an integer n (1 <= n <= 15), representing the size of wall. The next n lines represent the original wall. Each line contains n characters. The j-th character of the i-th line figures out the color of brick at position (i, j). We use a 'w' to express a white brick while a 'y' to express a yellow brick.

Output

For each case, output a line contains the minimum number of bricks Bob should paint. If Bob can't paint all the bricks yellow, print 'inf'.

Sample Input

2
3
yyy
yyy
yyy
5
wwwww
wwwww
wwwww
wwwww
wwwww

Sample Output

0
15

Source

 

题意概括:

一个二维矩阵, 输入每个格子的初始颜色,可以进行的操作是 粉刷一个格子则相邻的上下左右四个各自颜色都会取反(只有两种颜色);

问最后把全部各自涂成黄色的最小操作数;

解题思路:

根据题意,每个各自都是一个变元,根据各自之间的相邻关系构造增广矩阵;

高斯消元求出自由元个数 sum;

二进制枚举方案,找出最小的操作数;

 

AC code:

  1 #include <cstdio>
  2 #include <iostream>
  3 #include <algorithm>
  4 #include <cstring>
  5 #define INF 0x3f3f3f3f
  6 #define LL long long
  7 using namespace std;
  8 const int MAXN = 300;
  9 
 10 int equ, var;
 11 int a[MAXN][MAXN];
 12 char str[MAXN][MAXN];
 13 int x[MAXN];
 14 int free_x[MAXN];
 15 int free_num;
 16 int N;
 17 
 18 int Gauss()
 19 {
 20     int maxRow, col, k;
 21     free_num = 0;
 22     for(k = 0, col = 0; k < equ && col < var; k++, col++){
 23         maxRow = k;
 24         for(int i = k+1; i <equ; i++){
 25             if(abs(a[i][col]) > abs(a[maxRow][col]))
 26                 maxRow = i;
 27         }
 28         if(a[maxRow][col] == 0){                //最大的都为0说明该列下面全是 0
 29             k--;
 30             free_x[free_num++] = col;           //说明col是自由元
 31             continue;
 32         }
 33         if(maxRow != k){                        //交换行
 34             for(int j = col; j < var+1; j++)
 35                 swap(a[k][j], a[maxRow][j]);
 36         }
 37         for(int i = k+1; i < equ; i++){             //消元
 38             if(a[i][col] != 0){
 39                 for(int j = col; j < var+1; j++){
 40                     a[i][j] ^= a[k][j];
 41                 }
 42             }
 43         }
 44     }
 45     for(int i = k; i< equ; i++){
 46         if(a[i][col] != 0) return -1;   //无解
 47     }
 48     if(k < var) return var-k;           //返回自由元个数
 49 
 50     for(int i = var-1; i >= 0; i--){    //唯一解,回代
 51         x[i] = a[i][var];
 52         for(int j = i+1; j < var; j++){
 53             x[i] ^= (a[i][j] && x[j]);
 54         }
 55     }
 56     return 0;
 57 }
 58 
 59 void init()
 60 {
 61     memset(a, 0, sizeof(a));
 62     memset(x, 0, sizeof(x));
 63     equ = N*N;
 64     var = N*N;
 65     for(int i = 0; i < N; i++){                 //构造增广矩阵
 66         for(int j = -0; j < N; j++){
 67             int t = i*N+j;
 68             a[t][t] = 1;
 69             if(i > 0) a[(i-1)*N+j][t] = 1;
 70             if(i < N-1) a[(i+1)*N+j][t] = 1;
 71             if(j > 0) a[i*N+j-1][t] = 1;
 72             if(j < N-1) a[i*N+j+1][t] = 1;
 73         }
 74     }
 75 }
 76 
 77 void solve()
 78 {
 79     int t = Gauss();
 80     if(t == -1){            //无解
 81         printf("inf\n");
 82         return;
 83     }
 84     else if(t == 0){        //唯一解
 85         int ans = 0;
 86         for(int i = 0; i < N*N; i++){
 87             ans += x[i];
 88         }
 89         printf("%d\n", ans);
 90         return;
 91     }
 92     else{                   //多解,需要枚举自由元
 93         int ans = INF;
 94         int tot = 1<<t;
 95         int cnt = 0;
 96         for(int i = 0; i < tot; i++){
 97             cnt = 0;
 98             for(int j = 0; j < t; j++){
 99                 if(i&(1<<j)){
100                     x[free_x[j]] = 1;
101                     cnt++;
102                 }
103                 else x[free_x[j]] = 0;
104             }
105 
106             for(int j = var-t-1; j >= 0; j--){
107                 int index;
108                 for(index = j; index < var; index++){
109                     if(a[j][index]) break;
110                 }
111                 x[index] = a[j][var];
112 
113                 for(int s = index+1; s < var; s++)
114                 if(a[j][s]) x[index] ^= x[s];
115 
116                 cnt+=x[index];
117             }
118             ans = min(ans, cnt);
119         }
120         printf("%d\n", ans);
121     }
122 }
123 
124 int main()
125 {
126     int T_case;
127     int tpx, tpy;
128     scanf("%d", &T_case);
129     while(T_case--){
130         scanf("%d", &N);
131         init();
132         for(int i = 0; i < N; i++){
133             scanf("%s", str[i]);
134             for(int j = 0; j < N; j++){
135                 tpx = i*N+j, tpy = N*N;
136                 if(str[i][j] == 'y') a[tpx][tpy] = 0;
137                 else a[tpx][tpy] = 1;
138             }
139         }
140         solve();
141     }
142     return 0;
143 }
View Code

 

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容) 内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。 立即下载

相关推荐

双向全桥CLLC谐振变换器仿真模型(Simulink仿真实现)

内容概要:本文系统介绍了双向全桥CLLC谐振变换器的Simulink仿真模型,重点阐述了变频控制、闭环仿真及其与多种电力电子拓扑(如维也纳整流器、DAB变换器、图腾柱PFC等)的联合仿真设计。资源包涵盖2.5kW双向全桥LLC、V2G电动汽车充放电系统、三相PFC、多相交错LLC等多种变换器的仿真案例,并深入展示了三电平VIENNA整流器在双闭环PI控制与SVPWM调制策略下,结合上下电容电压差值补偿实现中点电位平衡的先进控制方法。通过仿真验证,该策略不仅有效维持了800V直流母线电压的稳定,还在动态工况下显著提升了电容电压的均衡度,同时保持了较低的输入电流THD,充分体现了SVPWM与中点平衡控制协同优化的技术优势。; 适合人群:具备电力电子与自动控制理论基础,从事新能源发电、电动汽车、工业电源、微电网等领域的研究生、工程师及科研人员。; 使用场景及目标:① 学习并构建高频谐振变换器(如LLC、CLLC)的Simulink仿真模型,掌握其变频与混合控制策略;② 深入理解并应用中点电位平衡、双闭环PI控制、SVPWM调制等核心技术于VIENNA等三电平变换器中;③ 复现高水平期刊论文中的控制算法,服务于科研项目申报、学术论文撰写或工程产品开发。; 阅读建议:该资源为综合性仿真资料库,建议使用者结合自身研究方向(如电动汽车充电、新能源并网)选择对应案例进行精学,重点关注控制策略的设计逻辑、仿真参数的整定方法以及SVPWM与中点平衡的协同机制,并充分利用附带的计算书和参考文献深化理解,以实现从仿真模型到实际工程应用的顺利转化。

poj1830 高斯消元法

/** * poj1830 高斯消元法(线性代数,矩阵求秩) * 就是一个解二进制的线性方程组,求解的个数,如果增广阵和系数阵的秩不等,那就无解,否则解的个数是2^(n-秩) * 求秩的过程就是逐行消去的过程,最左列为1的行下面,该列都消去为0,最后统计非全0的行就是秩了 * 这个题一上来先把xy搞混了,结果WA了好多次都没搞清楚错在哪儿 后来索性试了一下,才解决了问题 */ #inc

northsnow_bupt的专栏 571

Unity 开发Apple Vision Pro物体识别追踪ObjectTracking

当您在 visionOS 应用中实现对象跟踪时,您可以将现实世界中的物体无缝集成到人们的周围环境中,以增强他们的沉浸式体验。通过跟踪一个或多个物体的 3D 位置和方向,您的应用可以使用虚拟内容增强它们。您可以使用对象跟踪来提供与人周围环境中的对象的虚拟交互,例如:引导某人使用某件物品的功能、阅读其历史或了解其在周围环境中的行为。使用虚拟手册帮助人们解决家居用品和电器的问题。

Cool-浩 1186

HDU - 5833 Zhu and 772002 二进制高斯消元

题目链接 题意: 300个最大质因数小于2000的数,选若干个它们的乘积为完全平方数有多少种方案。 思路: 可以发现满足条件的选择是,将最后得到的完全平方数分解质因数,那么每个质因数的个数都应该为偶数个. 那么我们针对每一个质因数列一个方程(小于2000的质因数303个)。a[j][i] 表示对应第j个质因数,被第i个数包含。x[i]表示第i个数选与不选,为1则选,为0则不选.

Marcus-Bao的个人主页 603

Win11下Android模拟器报HAXM未安装?三步搞定虚拟化配置(附终端命令)

本文详细解析了Win11下Android模拟器HAXM报错的解决方案,从虚拟化配置到终端命令实战。通过检查BIOS设置、调整Windows功能及执行PowerShell命令,三步搞定虚拟化配置问题,有效提升模拟器性能。特别针对Win11与HAXM的兼容性问题提供了专业指导。

weixin_29215815的博客 144

Ubuntu22.04下RTX2080显卡驱动、CUDA、cuDNN保姆级避坑安装指南(实测有效)

本文提供Ubuntu22.04下RTX2080显卡驱动、CUDA和cuDNN的详细安装指南,涵盖前期准备、驱动安装、CUDA版本选择、cuDNN配置及常见问题解决。通过实测有效的步骤和优化建议,帮助用户快速搭建稳定的深度学习环境,避免常见陷阱。

weixin_42540248的博客 285

洛谷P1092 (高斯消元+搜索/二进制状态压缩)

题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子: 43#9865#045 + 8468#6633 44445509678 其中#号代表被虫子啃掉的数字。根据算式,我们很容易判断:第一行的两个数字分别是55和33,第二行的数字是55。 现在,我们对问题做两个限制: 首先,我们只考虑加法的虫食算。这里的加法...

weixin_41934068的博客 364

中国高质量夜间灯光数据

中国高质量夜间灯光数据是CnOpenData与吉林高分遥感应用研究院有限公司合作的数据库 ,基于多源夜间灯光卫星遥感影像,经过科学手段对数据进行降噪、修正、分析统计,以年度、月度为更新频率,以省市县三级行政区划作为统计单元,制作高质量夜间灯光数据。

Sunny9qx的博客 3313

高斯消元学习笔记

概述 高斯消元用于求解线性方程组,也可用于求矩阵的秩和逆. 方法是先将系数矩阵消为上三角行列式,再逐一回代求解。 算法 此处参考了ddd的板子,二维数组A中存放系数矩阵,一维数组B中存放常数项。 1.设当前正在处理第i行,将i到n中第i列最大的一行置换到第i行。 2.当A[i][i]=0时,出现异常:如果B[i]=0,则有多解,否则无解。 3.将其他所有行的第i列到第n列都减去本行相...

秋叶红于二月花 804

【WorkBuddy专栏15】灵感被折叠到「更多」里,真的不重要了吗?——一个「被低估」功能的当下价值与未来演变

【WorkBuddy专栏15】灵感被折叠到「更多」里,真的不重要了吗?——一个「被低估」功能的当下价值与未来演变

AI人人懂 964

番外篇 | 复现HIC-YOLOv5,助力小目标物体的检测

在本文中提出了一种改进的YOLOv5算法:HIC-YOLOv5,用于小目标检测,具有更好的性能和较低的计算成本。🌈

小哥谈 1131

[POJ1830]开关问题(高斯消元)

题目描述传送门题解又是开关灯问题… 统计有几种方案,就是统计有多少个自由元x,那么答案2x2^x 清数组T_T代码#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<bitset> #include<cmath> using namespace std; #define N 40in

zyf2000 584

税务某局 webpack 登录接口逆向分析

我们再回到接口逻辑去看一下,发现每次请求前,还有两个接口,getpublickey和sendsm4,这里分析了一下调用逻辑,sm4这个接口用到一个参数是由publickey返回的一个参数而来,这个参数又经过内部加密处理,我们找到这个参数加密的地方,大概是在这个位置。我们还是顺着逻辑将加载器扣下来,然后用一个变量去接收,有了加载器,我们直接把加密代码扣下来做下处理,把一些用到的参数整理下如下。打上断点分析后,_utils_getuuid这个很长的变量也是加载器的一个函数,我们将这段代码也扣下来,如下。

码王吴彦祖的博客 403

【高斯消元】poj 1681 Painter's Problem

http://poj.org/problem?id=1681 高斯消元求最小步数,二进制枚举0-1变元,统计和的最小值 /* poj 1222 高斯消元-枚举自由变元 题意: 0-1开关,n*n个方程,n*n个未知量,求最小操作的步数 思路: 充分理解高斯消元的过程,如果有变元,二进制枚举 利用初等行变换最终的上三角阵,自下向上求解剩余变量,统计1的个数

Hacker_vision 536

弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制1. 前言2. 顶帽变换(Top_hat)算法3. Matlab仿真4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵“弱"和“小’’两个方面:“弱’’是指目标在红外波长上所表现出来的强度,具体反映到所拍摄的红外图像上,就是指目标的灰度值;而“小’’是指目标的尺寸大小,也就是前面所述的成像面积很小,反映到红外图像上就是指目标所占的像素数目很少。 SPIE国际光学工程学会(Societyof Photo一0ptical Instrument

sinat_34897952的博客 5295

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

POJ1681 Painter's Problem【高斯消元法】

题目大意: 有一个 N*N 的正方形的墙,其中一些墙是白色的,另一些墙是黄色的。Bob 想要把 所有的墙都涂成黄色。但是他的画笔不是很好用。当他涂位置为 (i,j) 的砖时,会将 周围 (i+1,j),(i-1,j),(i,j+1),(i,j-1) 位置上的砖改变颜色(黄色回变成白色,白 色会变成黄色)。现在要计算出 Bob 最少需要涂多少块砖,会将所有的墙变为黄色。 解题思路: 每个位置上的砖最多涂一次,因为涂两次就和没涂是一样的。和 POJ1222 其实是一 样的,不过需要判断是否有解。如

程序员充电站(itcharge) 978

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

POJ1681:Painter's Problem(高斯消元 & 格子转换 & 二进制)

Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7113   Accepted: 3388 Description There is a square wall which is made of n*n small squar

junior19的博客 391

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

poj 1681 Painter's Problem

Painter's Problem 题意:给一个n*n(1 <= n <= 15)具有初始颜色(颜色只有yellow&white两种,即01矩阵)的square染色,每次对一个方格染成黄色时,同时会把周围的方格也染成黄色。(这和1222的开关一样的关联关系)问最后可以将square全部染成黄色的最小染色方格数? 思路: 1.直接预处理出增广矩阵,和1222不同的是里面有最...

weixin_30895603的博客 106

POJ 1681 Painter's Problem (高斯消元 枚举自由变元求最小的步数)

题目链接 题意: 一个n*n 的木板 ,每个格子 都 可以 染成 白色和黄色,( 一旦我们对也个格子染色 ,他的上下左右 都将改变颜色); 给定一个初始状态 , 求将 所有的 格子 染成黄色 最少需要染几次? 若 不能 染成 输出 inf。 分析: 和1222差不多,唯一的区别是这个题还要求 最短的步数,其实只需要枚举一下最后的x[][]是否为1,即是否需要按下, 由于只有无解或者解...

weixin_30402343的博客 120

高斯肖元专题

poj 1222  高斯肖元模版题 #include #include #include #include using namespace std; const int maxn=30; int a[maxn][maxn+1],x[maxn]; int equ,var,free_num; void Debug() { for(int i=0;i<equ;i++) {

态度决定高度 2649

用IDL+ENVI处理MODIS数据?手把手教你用CASA模型估算区域NPP(附完整代码)

本文详细介绍了如何使用IDL+ENVI处理MODIS数据并应用CASA模型估算区域净初级生产力(NPP)。从环境配置、数据预处理到CASA模型核心算法实现,提供了完整的代码示例和分步指导,帮助研究者高效完成NPP计算任务,适用于生态学和地理信息科学研究。

weixin_30723433的博客 496

SGU 275 To xor or not to xor (高斯消元)

题目链接 题意:有n个数,范围是[0, 10^18],n最大为100,找出若干个数使它们异或的值最大并输出这个最大值。 分析: 一道高斯消元的好题/ 我们把每个数用二进制表示,要使得最后的异或值最大,就是要让高位尽量为1,高位能不能为1就必须用高斯消元判断了。 1. 根据数的二进制表示,建立方程组的矩阵,结果那列置为1。2. 从下往上高斯消元(高位放下面),如果该行有未被控制的变元,则该...

weixin_30649859的博客 141

POJ 1222 EXTENDED LIGHTS OUT 二进制高斯消元 (开关翻转问题)

题目链接 题意: 有一个开关灯游戏,游戏界面是一个5行6列的灯阵,每个灯旁边有一个按钮,按下这个按钮会使得该位置的灯以及上下左右的灯改变状态(亮变成暗,暗变成亮)。 让你输出一个方案,最终使得所有灯灭掉。 思路: 每一个灯都只有01两种状态,而且每一个灯翻转两次相当于没翻转.这个题确实暴力枚举可以过.但是今天我们考虑高斯消元. 我们从反面来考虑

Marcus-Bao的个人主页 1274

高斯消元法的算法介绍

前面讲过,三对角矩阵由于其特殊性,采样追赶法可在O(N)的时间复杂度下进行求解,而对于一般的矩阵,采用一般的高斯消元法,时间复杂度确实O(N^3) 从矩阵的观点来看,高斯消元等价于LU分解 容易知道,采样高斯消元可以求出矩阵的秩,但numpy内置求矩阵秩的rank函数并不是根据高斯消元求的,而是SVD分解的方法。 ...

wwxy1995的博客 2235

[高斯消元 线性基 二进制拆分] BZOJ 2844 albus就是要第一个出场

和hdu3949刚好相反啦 记得特判0 还是一个结论 异或值有1 #include #include #include using namespace std; typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=b

雯舞 485

高斯消元&&线性基 算法小结

姿势不够多了,来学一学新姿势首先我们来讲高斯消元。。 一.高斯消元 高斯消元是一种实用的解多元方程组的一种解法,从严格意义上来讲,这是一种数学方法,在OI中也有较为广泛的应用,最为经典的就是用高斯消元求解线性基。高斯消元的时间复杂度为O(n^3)。具体我们来写个例子。。 现在有下列方程组: 我们先一个个消,先消去x。第一个方程x的常数项为2,那么方程(1)除以2,然后下面的方程在减去

老臣 1418
上一篇: Codeforces Round #521 (Div. 3) D. Cutting Out 【二分+排序】
下一篇: POJ 3185 The Water Bowls 【一维开关问题 高斯消元】
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值