摘要:
题意: 科学家用机器人探险地下洞穴,但是机器人只有一个存储器,每到一个洞穴,就会记下洞穴的名字,当有多个洞穴可以进入时,总会选择最左边没有进入过的洞穴,当可选择的洞穴都进过时,他会后退,任意两个洞穴之间只有一条路径,当机器人回来时,科学家根据存储器发现洞穴的结构不是唯一的,他们想知道有多少种可能的结构。数学模型: 已知一棵树的深度搜索的节点(包括回退)顺序,求树的总数。分析: 因为答案很大,肯定不可能一一枚举; 设f[i][j]表示从i个点到j个点所能构成的树的总数; 通过枚举回退点来重叠计算,以回退点为根(起点,回退点,终点必须相等),,f[i+1][k-1]*f[k][j]; ... 阅读全文
posted @ 2012-06-21 09:57
蚀
阅读(347)
评论(0)
推荐(0)
摘要:
数学模型: 已知一个n*m的国际象棋的棋盘,有qn个皇后,kn个骑士,pn的士兵(士兵不能动),士兵不能动,皇后和骑士的走法不变,求棋盘有多少格子没被占用和被皇后和骑士攻击到。分析: 因为皇后的走法覆盖面较广,所以给每个格子设四个标记,表示是否被皇后的四个方向的攻击到,因为状态数少,可以按位标记,来整合成一个整数,分别为1,2,4,8。View Code #include<cstdio>#include<cstring>#define MAXN 1010using namespace std;struct Piece{ int row,col;};Piece Q[MAX 阅读全文
posted @ 2012-06-21 09:07
蚀
阅读(545)
评论(0)
推荐(0)
摘要:
数学模型: 已知n,求n中取k(k<=n)个数组成的m(m<=n)个的集合的排列数.分析: 因为是统计个数,和求组合数类似(见波利亚的解题法表),方法也差不多; f[i][j]表示的i个数组成j个集合的个数; 如果第i个数是单独成一个集合,有j个位置可以插入,f[i-1][j-1]*j; 如果第i个数是插入已有的j个集合,f[i-1][j]*j; 算完之后n个数取k个的组合数.View Code #include<cstdio>#include<cstring>using namespace std;int main(){ long long i,j,m,d 阅读全文
posted @ 2012-06-21 08:49
蚀
阅读(318)
评论(0)
推荐(0)
摘要:
题意: 统计两个整数a,b之间各个数字(0~9)出现的次数,如1024和1032,他们之间的数字有102410251026102710281029103010311032总共有10个0,10个1,3个3等等。分析: 因为前导0的干扰,为了计算方便暂时都先计算在内,之后再减; 如果是0~199,那么百位上的0和1各出现一次,s剩下的就是两个00~99,总共两百个二位数,而每个数出现的次数都一样,都是2*(99-00+1)/10; 那么任意的数都可以分解成类似的数字,如3426,则可以分成0000~2999,3000~3399,3400~3419,3420~3426几个部分各自计算,再求和... 阅读全文
posted @ 2012-06-21 08:29
蚀
阅读(689)
评论(0)
推荐(0)

浙公网安备 33010602011771号