51nod-1346: 递归】的更多相关文章

1346 递归 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 函数f(n,m) { 若n=1或m=1返回a[n][m]; 返回f(n-1,m)异或f(n,m-1); } 读入2<=n,m<=100 for i=2->100读入a[1][i] for i=2->100读入a[i][1] 输出f(n,m) 发现当n,m较大时程序变得异常缓慢. 小b经过一番思考,很快解决了这个问题. 这时小c出现了,我将n,m都增加131072,你还…
我终于知道我有多么蠢了...推规律根本不带我这么推的...跟51nod那场比赛的傻逼B题一样,想都不想想就打表找规律...智障啊找规律也要按照基本法! //f[1][2]=a[1][2] f[2][1]=a[2][1] //f[2][2]=a[1][2]^a[2][1] //f[2][3]=a[1][2]^a[2][1]^a[1][3]//f[2][4]=a[1][2]^a[2][1]^a[1][3]^a[1][4]//f[2][5]=a[1][2]^a[2][1]^a[1][3]^a[1][4…
1632 B君的连通 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 B国拥有n个城市,其交通系统呈树状结构,即任意两个城市存在且仅存在一条交通线将其连接.A国是B国的敌国企图秘密发射导弹打击B国的交通线,现假设每条交通线都有50%的概率被炸毁,B国希望知道在被炸毁之后,剩下联通块的个数的期望是多少? Input 一个数n(2<=n<=100000) 接下来n-1行,每行两个数x,y表示一条交通线.(1<=x,y<=n) 数据保证其交通系统构成一…
递归   基准时间限制:1 秒 空间限制:131072 KB 分值: 80 函数f(n,m) { 若n=1或m=1返回a[n][m]; 返回f(n-1,m)异或f(n,m-1); } 读入2<=n,m<=100 for i=2->100读入a[1][i] for i=2->100读入a[i][1] 输出f(n,m) 发现当n,m较大时程序变得异常缓慢. 小b经过一番思考,很快解决了这个问题. 这时小c出现了,我将n,m都增加131072,你还能解决吗? 相对的,我会读入2->…
1.乘法逆元 直接使用等比数列求和公式,注意使用乘法逆元 ---严谨,失细节毁所有 #include "bits/stdc++.h" using namespace std; #define rep(i, s, n) for(int i=s;i<n;i++) #define MOD 1000000007 #define LL long long ; LL quick_pow(LL a,LL b) { LL ans=; ){ ){ ans=ans*a%MOD; } b>>…
约瑟夫环问题的原来描述为,设有编号为1,2,--,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,--,如此下去,直到所有人全部出圈为止.当任意给定n和m后,设计算法求n个人出圈的次序.  稍微简化一下. 问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号. 利用数学推导,如果能得出一个通式,就可以利用递归.循环等手段解决.下面给出推导的…
最长公共子序列问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 abcicba abdkscab 输出示例 abca 请选取你熟悉的语言,并在下面的代码框中完成你的程序,注意数据范围,最终结果会造成Int32溢出,这样会输出错误的答案. 不同语言如何处理输入输出,请查看下面的语言说明. #include <iostream> #include <cstring> #include &…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1117 跟挑战程序书上例题一样,将要切割的n断木板,分别对应二叉树树的叶子节点,则切割的总开销为木板的长度×节点的深度,可以画图理解,那么最短的木板(L1)应当是深度最大的叶子节点之一,次短的板(L2)和它是兄弟节点,由一块长度是(L1+L2) 的木板切割而来,这样可以变成(n-1)块木板,然后递归求解到n==1. 书上贪心部分用的是O(n×n) 的算法 在这里会超时,需…
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1810 题目给出一个1~n的排列,问有多少连续区间.连续区间的定义为区间内元素排序后之间间隔为1. 对于一个区间[l,r],令mid=(l+r)/2,我们如果能在O(n)内求解出左端点在[l,mid],右端点在[mid+1,r]的连续区间数量,就可以将问题一分为二,递归求解[l,mid] [mid+1,r]. 现在来求解上面所说的这个子问题,首先默认i<j,有一个结论m…
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1934 根据给出的信息,可以递归地把笛卡尔树建出来.一个点只应该有 0/1/2 个孩子,不然就是无解. dp[ cr ] 表示把 1~siz[cr] 填进 cr 这个子树的方案数.那么 \( dp[cr]=C_{siz[cr]-1}^{siz[ls]}*dp[ls]*dp[rs] \) . 注意在各种地方判断无解!如果是 l , cr , r 的话,左孩子应该是 l , ls…