算法竞赛入门经典——训练指南
wwt9b15bs
这个作者很懒,什么都没留下…
展开
-
【题解】UVA11375 递推
题目链接 参考了大佬博客思路摘抄如下 d[i]记录用i跟火柴可以组成多少种数字,更新式是d[i+c[j]] += d[i], c[j]就是组成数字j要用的火柴数。但是不能以0开头,最后当火柴数大于等于6的时候就可以在总答案上+1,表示可以构成一个单独的0(因为之前没有0开头的,所以要+1补回来),最后答案就是f[n] = d[1] + d[2] + d[3] + …. + d[n],数据很大,...原创 2018-08-23 07:10:58 · 171 阅读 · 0 评论 -
【题解】UVA11137 递推
题目链接 d[i][j]表示用不大于i的整数的立方,累加和为j的方案 可以优化#include<cstdio>#include<cstring>const int N=25;const int M=1e4+10;typedef unsigned long long ull;ull d[N][M];void Init(){ for(int i...原创 2018-08-23 07:11:05 · 153 阅读 · 0 评论 -
【题解】UVA11174 递推+逆元+快速幂
题目链接 参考了大佬博客思路摘抄如下 首先我们可以把关系建成树,这样我们就有可能得到一个森林(或者是一课树),然后我们再虚拟出来一个点0连接所有森林的根节点,这样是为了保证是一棵树,然后题目就变成了给你一棵树,不改变关系,问这个树有多少种方式,这个还是排列组合问题,对于每一个根节点,有这样的性质 root[i] = f[1]f[2]..f[k] * (s[i]-1)!/s[1]!s[2...原创 2018-08-24 07:45:46 · 191 阅读 · 0 评论 -
【题解】LA3516(同poj2795/uva1362/zoj2641/scu2469/gym-101334E)[ACM/ICPC NEERC 2005].Exploring Pyramids 递推
以UVA链接为例 设输入序列为S,d(i,j)为子序列Si,Si+1,…,Sj对应的树的个数,则边界条件是d(i,i)=1,且Si不等于Sj是d(i,j)=0(因为起点和终点应是同一点)。在其他情况下,设第一个分支在Sk时回到树根(必须有Si=Sk),则这个分支对应的序列是Si+1,…,Sk-1,方案数为d(i+1,k-1);其他分支对应的访问序列为Sk,…,Sj,方案数为d(k,j)。这样,在...原创 2018-08-23 07:11:10 · 244 阅读 · 0 评论 -
【题解】UVA11361 递推
题目链接 设f(d,m1,m2)表示共d个数字,其中各数字之和除以k的余数为m1,这些数字组成的整数除以k的余数为m2的整数的个数,则每个模板对应的解的个数都等于某个f(d,m1,m2) 递推式f(d,m1,m2)=sum{f(d-1,(m1-x)mod k,(m2-10^(d-1)mod k|x=0,1,2,…,9}#include<cstdio>#include&lt...原创 2018-08-23 07:11:17 · 224 阅读 · 0 评论 -
【题解】LA4123[ACM/ICPC World Finals 2008].Glenbow Museum 递推
题目链接 非常巧妙,详见算法竞赛入门经典——训练指南#include<cstdio>#include<cstring>const int maxn=1000;typedef long long ll;ll d[maxn+1][5][2],ans[maxn+1];//d[i][j][k]表示共有i个R,其中有j对相邻的R,第一个元素是k最后一个元素是R,且没有...原创 2018-08-23 07:11:21 · 261 阅读 · 0 评论 -
【题解】UVA10253 递推
题目链接 每个串并联网络都可以看成一棵树:为每次串联或并联创建一个节点,并且把所有串联/并联部分看成该节点的子树,只要算出“共n个叶子,且每个非叶节点至少有两个子节点”的树的数目f(n),再乘以2就是答案 设d(i,j)表示每棵子树最多包含i个叶子,一共有j个叶子的方案数,则所求的f(n)=d(n-1,n)。 假设恰好包含i个叶子的子树有p棵,那么这些树的组合数等于从f(i)棵树中选p棵的方...原创 2018-08-23 07:11:27 · 217 阅读 · 0 评论