UVa 10384 - The Wall Pushers】的更多相关文章

链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1325 题意: 从迷宫的S处出发,每次可以往东.南.西.北4个方向之一前进.如果前方有墙壁,游戏者可以把墙壁往前推一格.如果有两堵或者多堵连续的墙,则不能推动.另外,游戏者也不能推动游戏区域边界上的墙.用最少的步数走出迷宫(边界处没有墙的地方就是出口).迷宫总是有4行6列,多解时任意…
题意:从起点出发,可向东南西北4个方向走,如果前面没有墙则可走:如果前面只有一堵墙,则可将墙向前推一格,其余情况不可推动,且不能推动游戏区域边界上的墙.问走出迷宫的最少步数,输出任意一个移动序列. 分析: 1.最少步数--IDA*. 2.注意,若此墙可推动,必须改变当前格子,和沿当前格子向前一步的格子的墙的标记. 3.若沿当前格子向前两步的格子存在,则这个格子的墙的标记也要改变.不存在的情况是:把墙推向了边界. 4.因为每个格子的值是是1(如果正方形以西有一个墙),2(北),4(东)和8(南)的…
Problem UVA10384-The Wall Pushers Accept: 199   Submit: 1546Time Limit: 10000 mSec Problem Description Input The input file may contain several mazes to solve. Each maze description starts with a single line containing two integers x and y (1 ≤ x ≤ 6,…
题目大意:走迷宫,遇到墙时可以推着墙走,但墙后还是墙时便不能推.求出一条任意的最短路径. 题目分析:这道题出的比较人性,输入的时候便是将四周的墙用二进制数表示好了,其实这样减轻了做题人的负担.IDA*,当到最近的一个出口的距离加上当前层数cur都比maxd大时,则剪枝.不过,值得注意的是:当推着墙走的时候,涉及到3个格子周围的墙的变化(在边界除外). 代码如下: # include<iostream> # include<cstdio> # include<cmath>…
题目大意:用1*2的砖头建n*2的墙,问有多少种不同的砖头排列方式?与斐波那契序列相似. #include <cstdio> #define MAXN 60 #define N 50 unsigned int F[MAXN]; int main() { #ifdef LOCAL freopen("in", "r", stdin); #endif F[] = ; F[] = ; ; i <= N; i++) F[i] = F[i-] + F[i-];…
UVa 10618 Fixing the Great Wall 题目:  http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36139 思路:   数轴上有n个点需要修复,每个点有信息c,x,d 表示位于x且在t时修缮的费用是c+d*t,找一个修缮序列使n个点能全部修缮且有费用最小. 可以发现:在任意时刻,修缮完的点都是连续的,因为修缮不需要时间,将一些点“顺手”修缮了肯定不差. d[i][j][k],表示已经将i-j个点修缮…
题意: 45块石头如图排列,每块石头上的数等于下面支撑它的两数之和,求其余未表示的数. 分析: 首先来计算最下面一行的数,A71 = A81 + A82 = A91 + 2A92 + A93,变形得到A92 = (A71 - A91 - A93) / 2. 以此类推,就能得到最下面一整行的数.有了这个“地基”以后,所有的数就都能算出来了. #include <cstdio> ][]; int main() { //freopen("in.txt", "r"…
题目:有非常多点.修一座最短的围墙把素有点围起来,使得全部点到墙的距离不小于l. 分析:计算几何,凸包. 假设.没有距离l的限制.则答案就是凸包的周长了.有了距离限制事实上是添加了2*π*l. 证明:如上图.在凸包外做相应边的矩形: 多边形内角和 = 180*(n-2): 外角和 = 360*n - 内角和 = 180*n+360: 全部直角和为2*90*n: 所以,全部扇形的内角和为360:即围栏比凸多边形周长多2*π*l. 说明:坐标比較a3.x < b.x 写成 a.x < b.y 查了…
https://vjudge.net/problem/UVA-11040 找规律 #include<cstdio> using namespace std; ][]; int main() { int T,d; scanf("%d",&T); while(T--) { ;i<=;i++) ;j<=i;j++) scanf(-][j*-]); ;i<=;i+=) { ;j<=;j+=) { a[i][j]=a[i-][j-]-a[i][j-]-…
砖块上的数字最终都可以看作是最后一行的线性组合,独立变元最多9个. 这类题的一般做法,线性组合都可以列出方程然后高斯消元. 对于这道题,只要确定最后一行剩下的4个变量就好了,对于最后一行的j位置,它对上面位置某个数字的和贡献次数 等于它到那个位置路径的方案数,可以发现就是杨辉三角.倒数第二行的数已经足够确定剩下的变量,x到对应位置y的方案是2. x = (y - xleft - xright)/2. /***********************************************…