题意分析:
该题是需要深度优化的八皇后问题,首先看一下,经典八皇后问题的一般解法:
该题不一样的地方有:
1)N不是8,而是6-13
2)需输出结果个数和头3个结果
解题思路:
1)只考虑一半的column结果乘以2,另一半认为是沿中心垂直对称的。如果N是奇数,则结果中数量要补上中间那条column。
2)优化对角线的判断,使之成为搜索的状态,而不是每次判断都要重新算(这里和The Clocks这一题有异曲同工)。可以发现两条对角线上的元素特征分别是i+j以及i-j+N是相同的,因此开两个2×N大小的int数组来记录占用情况。注意此处不是boolean而是int的原因是占用的影响有累积效应。
3)同理,可以优化列占用情况。(和上述八皇后不同的是,这题必须一行一行考虑)
4)小数据的情况要特别考虑,该题中N为6时,优化check是可以用的,但是由于要输出3个结果,只查找一半是不可行的,要查找全部。
代码实现:
https://github.com/leonlu/USACOJavaSolution/blob/master/USACOSection1/src/checker.java
该题是需要深度优化的八皇后问题,首先看一下,经典八皇后问题的一般解法:
public class Queens { private final static int MAX = 8; // site[i] = j => col:i row:j private static int[] site = new int[MAX]; private static boolean check(int col){ for(int i = 0; i < col; i++){ if(site[i] == site[col] || //不在一行上 Math.abs(site[col]-site[i]) == col - i) //也不在对角线上 return false; } return true; } private static void queens(int col){ if(col == MAX) ;//output(); else for(int i = 0; i < MAX; i ++){ site[col] = i; if(check(col)) queens(col+1); } } public static void main(String[] args){ queens(0); } }
该题不一样的地方有:
1)N不是8,而是6-13
2)需输出结果个数和头3个结果
解题思路:
1)只考虑一半的column结果乘以2,另一半认为是沿中心垂直对称的。如果N是奇数,则结果中数量要补上中间那条column。
2)优化对角线的判断,使之成为搜索的状态,而不是每次判断都要重新算(这里和The Clocks这一题有异曲同工)。可以发现两条对角线上的元素特征分别是i+j以及i-j+N是相同的,因此开两个2×N大小的int数组来记录占用情况。注意此处不是boolean而是int的原因是占用的影响有累积效应。
3)同理,可以优化列占用情况。(和上述八皇后不同的是,这题必须一行一行考虑)
4)小数据的情况要特别考虑,该题中N为6时,优化check是可以用的,但是由于要输出3个结果,只查找一半是不可行的,要查找全部。
代码实现:
https://github.com/leonlu/USACOJavaSolution/blob/master/USACOSection1/src/checker.java
发表评论
-
USACO Section 1.5.3 [Superprime Rib] Java题解
2011-07-15 22:24 1506题意分析: 7331是素数,733是素数,73是素数,7也是素 ... -
USACO Section 1.5.2 [Prime Palindromes] Java题解
2011-07-15 22:12 1412题意分析: 找出a和b间既对称既是素数的数。 解题思路: 用 ... -
USACO Section 1.5.1 [Number Triangles] Java题解
2011-07-15 21:21 754题意分析: 数字三角形,找到从顶到底的最大和的通路。 解题思 ... -
USACO Section 1.4.4 [Mother's Milk] Java题解
2011-07-15 18:57 1271题意分析: 有容量为A,B,C的三个牛奶桶,容量范围为1-20 ... -
USACO Section 1.4.3 [Arithmetic Progressions] Java题解
2011-07-15 16:38 1809题意分析: 定义算术级数:一种序列a, a+b, a+2b, ... -
USACO Section 1.4.2 [The Clocks] Java题解
2011-07-15 15:50 1920题意分析: 有编号为A-I的9个时钟,时钟只有指向3、6、9、 ... -
USACO Section 1.4.1 [Packing Rectangles] Java题解
2011-07-14 17:18 1860题意分析: 给出4个长方形的高和长,以及给出6种基本布局,求合 ... -
USACO Section 1.3.4 [Prime Cryptarithm] Java题解
2011-07-10 14:36 1415题意分析: 已知数字1-9组成集合的一个子集,求满足题意乘法步 ... -
USACO Section 1.3.3 [Calf Flac] Java题解
2011-07-10 14:35 1306题意分析: 一眼看上去,又是找对称的,不过有一些明显的干扰因素 ... -
USACO Section 1.3.2 [Barn Repair] Java题解
2011-07-10 14:33 1195题意分析: C头奶牛在畜栏里(一个畜栏里最多只能有一头奶牛), ... -
USACO Section 1.3.1 [Mixing Milk] Java题解
2011-07-10 14:30 933题意分析: 牛奶收购站每天需要收购总量为N加仑牛奶,告诉你每天 ... -
USACO Section 1.2.5 [Dual Palindromes] Java题解
2011-07-08 21:49 884题意分析: 这题和上一题基本是一样的,输出N个大于S的Dual ... -
USACO Section 1.2.4 [Palindromic Squares] Java题解
2011-07-08 21:43 975题意分析: N固定为10进制的1-300,N的平方表示成B进制 ... -
USACO Section 1.2.3 [Name That Number] Java题解
2011-07-08 21:40 1289题意分析: 奶牛们原来只有由四个数字组成的编号,例如4734, ... -
USACO Section 1.2.2 [Transformations] Java题解
2011-07-08 21:37 830题意分析: 给定N*N的二维数组的变化前和变化后的情况,思考如 ... -
USACO Section 1.2.1 [Milking Cows] Java题解
2011-07-07 15:39 1272题意分析: 输入为N组 [900,1800],[1200,22 ... -
USACO Section 1.1.4 [Broken Necklace] Java题解
2011-07-06 20:41 1277题意分析: 一串项链,由红蓝白三种颜色的珠子串成。在某一点拆开 ... -
USACO Section 1.1.3 [Friday the Thirteenth] Java题解
2011-07-04 20:22 804题意分析: 已知1900年1月1日是周一(即1900年1月13 ... -
USACO Section 1.1.2 [Greedy Gift Givers] Java题解
2011-07-04 12:31 1060解题思路: 直接用String[]保持名字的顺序,Map< ... -
USACO Section 1.1.1 [Your Ride Is Here] Java题解
2011-07-04 11:23 1596众所周知,Java的运行效率大约比C/C++慢3倍左右。大多数 ...
相关推荐
USACO所有题目的题解 NOCOW整理版
usaco测试数据+标程 usaco的section1到section5的所有测试数据 以及标准程序
USACO教程,包含USACO全部英文原题,题解(NOCOW整理版),翻译,教程,代码,测试数据。
适合USACO的Java选手参考
USACO题解+代码+翻译,好东西,超级齐全,对大家帮助不小,特别是现在nocow挂了
usaco的某道题的题解
我的USACO题解和程序
USACO1.4~2.3C语言题解 绝对能通过
USACO题解(NOCOW整理版).doc
Usaco总结&题解 一位大牛写的Usaco的总结,并有所有题的题解,推荐!!
usaco全部题解。 网址:blog.csdn.net/jiangshibiao
usaco section2.3--section5.5源程序。。。。。。。。。。。。。。。。
资源包包括USACO 2001-2007年月赛的测试数据;usaco月赛十年题典(2000-2009),usaco月赛2002-2008题解。单独下载需资源分30分以上。为了方便编程爱好者,我这边统一下载打包。欢迎下载。
dfs结合位运算,很简单得实现8皇后问题,时间空间都很神奇。
丰富的USACO1.1--2.3.4的所有题解
USACO的偷懒程序
USACO题解及中文译题1.1.1-2.4.5 题目为TXT格式文档,代码为C++语言所编写
USACO月赛题解1
里面有usaco前几节的程序和代码,欢迎使用,希望对你有所帮主。
其中包含了USACO前些年的月赛试题和部分试题的数据,部分试题的详细题解,英文原题目与翻译后的题目,与题解一一对应