【2012.03.3普及组】烤饼干
来源:互联网 发布:西安软件新城2016 编辑:程序博客网 时间:2024/04/19 08:49
NOIP烤饼干时两面都要烤,而且一次可以烤R(1<=R<=10)行C(1<=C<=10000)列个饼干,当一面烤到规定时间时,机器会把整个翻过来以接着烤另一面。
有一天,正当机器准备翻饼干时发生了地震,有一些饼干被翻了过来,有一些没有。幸运的是,你可以手工操作,一次可以同时翻若干行或者若干列,但不能单独翻某一个饼干。
写一个程序计算通过翻转使得最终翻过来的饼干的数量得最大值。
例如下图是地震之后的情况,黑点表示未翻转,白点表示已经翻转:
翻转第一行后得到:
接着翻转第1列和第5列得到下图:
这样可以使得9个饼干翻转过来。
题解:
因为最多有十行,所以枚举每一行,而每一列翻转后白比黑多就翻。
代码:
var n,m,s:longint; a:array[0..10,0..100000] of longint;procedure main(x:longint);var i,j,t:longint; f:array[0..100000] of longint;begin if x=n+1 then begin f[0]:=0; for i:=1 to m do begin t:=0; for j:=1 to n do t:=t+a[j,i]; f[i]:=f[i-1]; if t>n-t then f[i]:=f[i]+t else f[i]:=f[i]+n-t; end; if f[m]>s then s:=f[m]; exit; end; main(x+1); for i:=1 to m do if a[x,i]=1 then a[x,i]:=0 else a[x,i]:=1; main(x+1); for i:=1 to m do if a[x,i]=1 then a[x,i]:=0 else a[x,i]:=1;end;var i,j:longint;begin readln(n,m); for i:=1 to n do for j:=1 to m do read(a[i,j]); main(1); writeln(s);end.
3 0
- 【2012.03.3普及组】烤饼干
- JZOJ 1492. 烤饼干
- 【2012.03.3普及组】打牌
- 【2012.03.3普及组】寻找星座
- 【2012.03.3普及组】坐船旅行
- jzoj 1396. 【2012.03.3普及组】打牌 解题报告
- jzoj 1397. 【2012.03.3普及组】寻找星座 解题报告
- jzoj 1400. 【2012.03.09普及组】骰子
- jzoj 1402. 【2012.03.09普及组】旅行
- 【2012.03.09普及组】骰子 (Standard IO)
- 【2012.03.09普及组】旅行 (Standard IO)
- noip2008普及组3题题解-rLq
- 一把干3类
- 干
- 【蒻爆了的NOIP系列--普及组复赛】(3)NOIP2012普及组复赛题解
- noip2013题解 普及组
- noip2014普及组题解
- Noip2014普及组
- 被人画是怎样一种体验?
- iconcls引用
- uwaGC调用
- ps编辑工具:渐隐/合并拷贝
- 字符串匹配算法综述:BF、RK、KMP、BM、Sunday
- 【2012.03.3普及组】烤饼干
- Qt高级教程图形视图部分
- Unity Taiwan: Unity 4.3 關於 Occlusion Culling : 最佳做法
- 倒序输出一个数
- 筛选素数
- 为什么不要做微商?
- IOS Dev Intro - Category
- linux zlib 解压缩和 iconv编码转换失败问题
- c++重载与模板