usaco 17.Jan 铜组T3
上午在打usaco月赛的铜组题,T1T2是用来秒杀的,然而T3卡了一上午,下面给出题面:
题意大概就是输入一个N*N的矩阵,矩阵中元素只有0与1两种状态,每次操作以左上角的点为矩阵中某一矩阵的左上方顶点,将该矩阵中所有元素状态改变(即0变为1,1变为0),求将矩阵中元素全部变为0的最小次数。
第一次看到样例的时候以为就是一道的DFS或BFS的搜索题,然后果断写了DFS,很正常就WA了。然而其实这道题需要用到贪心。。。
题目中提到,一个矩阵被改变两次之后还是原先的状态,那既然这样,如果将右下角的点留到最后处理的话,有很大可能会重复某次操作,所以每次操作的右下角顶点应该是从右下角开始搜索的,既然这样,每次操作的矩阵应该怎样选取呢?
因为最后要把所有的元素都变为0,那么最优解其实就是保证每次操作的右下角顶点都为1,并且保证该矩阵中所含1的个数最多。
那么这样的话策略就已经有了。关键代码如下:
//预先读入数据并求前缀和
for (;;)
{
bool flag=false;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
if (a[i][j]=='1'){flag=true; break;}
if (flag) break;
}
if (!flag) break;//判断矩阵是否全部为0
ans++;
int maxx=0,x=0,y=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (sum[i][j]>maxx&&a[i][j]=='1')//查找右下点状态为1且包含状态为1的元素的个数最多的矩阵的右下点
{
maxx=sum[i][j];
x=i; y=j;
}
for (int i=1;i<=x;i++)
{
for (int j=1;j<=y;j++)
{
if (a[i][j]=='1') a[i][j]='0';
else a[i][j]='1';//将所选取矩阵中所有元素的状态改变
}
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]-'0';//数据改变后再求矩阵前缀和
}
//输出答案
时间复杂度为O(n^4),数据范围为1到10,所以不会超时
usaco 17.Jan 铜组T3的更多相关文章
- 【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]
[题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描 ...
- 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T3 头晕的奶牛
[Usaco 2009 Gold]JZOJ2020年9月19日提高B组T3 头晕的奶牛 题目 Description 奶牛们发现,在农场里面赛跑是很有趣的一件事.可是她们一旦在农场里面不断地转圈,就会 ...
- USACO翻译:USACO 2014 JAN三题(2)
USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recordi ...
- USACO翻译:USACO 2014 JAN三题(1)
USACO 2014 JAN 一.题目概览 中文题目名称 滑雪场设计 滑雪降速 滑雪场评级 英文题目名称 skidesign slowdown skilevel 可执行文件名 skidesign sl ...
- Usaco 2019 Jan Platinum
Usaco 2019 Jan Platinum 要不是昨天老师给我们考了这套题,我都不知道usaco还有铂金这么一级. 插播一则新闻:杨神坚持认为铂金比黄金简单,原因竟是:铜 汞 银 铂 金(金属活动 ...
- USACO翻译:USACO 2012 JAN三题(2)
USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...
- USACO翻译:USACO 2012 JAN三题(1)
USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...
- USACO翻译:USACO 2013 JAN三题(1)
USACO 2013 JAN 一.题目概览 中文题目名称 镜子 栅栏油漆 奶牛排队 英文题目名称 mirrors paint lineup 可执行文件名 mirrors paint lineup 输入 ...
- [USACO 2018 Jan Gold] Tutorial
Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...
随机推荐
- mysql之多列索引
mysql的多列索引是经常会遇到的问题,怎样才能有效命中索引,是本文要探讨的重点. 多列索引使用的Btree,也就是平衡二叉树.简单来说就是排好序的快速索引方式.它的原则就是要遵循左前缀索引. 多个索 ...
- Java Volatile transient 关键字
随笔-204 评论-134 文章-0 trackbacks-0 Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变 ...
- Linux编程之UDP SOCKET全攻略
这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp so ...
- 【转】UWP 捕获全局异常
转自:http://www.cnblogs.com/youngytj/p/4749004.html 异步(async)方法中的异常无法被App的UnhandledException捕获的问题 这是一个 ...
- 办理英属哥伦比亚大学(本科)学历认证『微信171922772』UBC学位证成绩单使馆认证University of British Columbia
办理英属哥伦比亚大学(本科)学历认证『微信171922772』UBC学位证成绩单使馆认证University of British Columbia Q.微信:171922772办理教育部国外学历学位 ...
- linux面试题集锦4《转》
四.编程与应用题: 1.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下. 参考程序: #!/bin/sh FILENAME= echo “Input file na ...
- 一、spark入门之spark shell:wordcount
1.安装完spark,进入spark中bin目录: bin/spark-shell scala> val textFile = sc.textFile("/Users/admin/ ...
- lua调用C语言
在上一篇文章(C调用lua函数)中,讲述了如何用c语言调用lua函数,通常,A语言能调用B语言,反过来也是成立的.正如Java 与c语言之间使用JNI来互调,Lua与C也可以互调. 当lua调用c ...
- 使用FormData,进行Ajax请求并上传文件
前段时间做了个手机端的图片上传,为了用户体验,用ajax交互,发现了FromData对象,这里有详细解释https://developer.mozilla.org/zh-CN/docs/Web/API ...
- CodeForces 689E Mike and Geometry Problem
离散化,树状数组,组合数学. 这题的大致思路和$HDU$ $5700$一样.都是求区间交的问题.可以用树状数组维护一下. 这题的话只要计算每一个$i$被统计了几次,假设第$i$点被统计了$ans[i] ...