04 2020 档案
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5976 题目要求将一个数n分解成若干个不同的整数,使得他们的乘积最大,我们知道,任何数x想要分解成n个数使得乘积最大就要将每个数变成x/n,如果不限制数的数量就尽可能多的分成三,剩下的分成二,如果要求数不
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 思路:设定mod=9973,由于gcd(B,mod)=1,所以B对mod的逆元B'是可求得,然后(A/B)%mod=(A*B')%mod=((A%mod)*B')%mod=(n*B')%mod;所
阅读全文
摘要:题目链接:http://poj.org/problem?id=1061 对于同余线性方程,有如下的几个定理: 定理一:如果d = gcd(a, b),则必能找到正的或负的整数k和l,使 d = a*x+ b*y。 定理二:若gcd(a, b) = 1,则方程ax ≡ c (mod b)在[0, b-
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6030 题目要求给出一个长度为n的串,要求这个串中任意长度为素数的连续序列中r的数量多于或者等于b,我们不难得出只要长度为2或者3的序列都满足这个条件就能得出整个序列满足题目要求的条件,简单的证明如下:如
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3117 求fibonacci数列第n项,如果位数超过八位就求它的前四位和后四位,在此我们知道求后四位是非常简单的,只需要快速幂取模就可以,但是取前四位就需要经过一些操作,证明过程如下。最后为了防止后四位中
阅读全文
摘要:更新:calculate(a*b)modp通过乘法会溢出,所以通过加法加上long long 实现。 代码如下: #include<iostream> using namespace std; typedef long long ll ; ll power(ll a,ll b,ll p){ a%=p
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2886 题目要求求出点(S,T)之间经过k条边的最短路径,而对于长度为x的最短路径矩阵和长度为y的最短路径矩阵,可得到长度为x+y的最短路径矩阵,这可以效仿矩阵乘法进行更新(满足矩阵乘法的性质)。最初的矩阵是点对之间长度
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目给出一个区间 ,询问这个区间中符合要求的数的数量,一般数位dp的文法都是这样,数据量大的情况下可能会有le18,所以一定需要数位dp这样的复杂度在O(logn)量级的算法才能够胜任。 本题给出
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意大致是给出一个隶属关系树,每个人代表一个结点,每个结点都有权值,有父子关系的点对只能选择一个,问怎样使得权值之和最大。 代码如下: 1 #include<bits/stdc++.h> 2 us
阅读全文
摘要:题目链接:http://poj.org/problem?id=3280 一个序列,有n种不同的字符,可以在这个序列的任意位置插入和删除字符,花费不同,问最少需要多少花费可以使这个序列变成回文字符串。由于在头部插入和在尾部删除一个字符都能得到一个字符的前后回文对应,所以对于每一种字符只要知道插入和删除
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257 题目中说明炮弹只能像更高的位置发射,对于发射高度X,<=X的高度这个炮弹是可以射到的,所以我们可以先考虑第一个高度,找出最长下降子序列,将其从原序列中删去,接着找下一个最长下降子序列,再将其从原序
阅读全文
摘要:最长公共子序列(LCS):两个串s1和s2中取出若干有序位置的字符,使得取出的两个字符串相同的长度的最大值就是LCS 最长递增子序列(LIS):S的子序列,其中各元素按索引严格单调递增 最长公共递增子序列(LCIS):上面两者的结合,参考博客:https://blog.csdn.net/wall_f
阅读全文
摘要:hdu2069 : 给出五种硬币,要求用这些面值的硬币构成S,问方案数是多少。经典dp问题。本题如果不限制金币的使用数量的话可以用dp[i]来记录总数为i的方案数,转移方程是dp[i]=dp[i]+dp[i-type[i]],也就是用type[i]硬币算在i中,方案数就是钱总数为i-type[i]的
阅读全文
摘要:题目链接:http://poj.org/problem?id=1521 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<string.h> 5 #include<queue> 6 using
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911 题目给出一个序列和一个操作数k,操作集合是交换任意两个相邻的数,问操作k次之后序列的最小逆序对数量。一个没有升序排列的数列一定存在两个相邻的数是逆序对,只要对这两个数进行交换就可以使逆序对的数量减
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1735 题目给出一张01图,1代表的是有字,0代表的是空格或者是被涂去的字。一共有m个段落,每个段落都是开头空两行,问最少有多少个字被涂去。 想要的到最少的被涂去的字必须保证每个段落之后的字尽量少。由此想
阅读全文
摘要:最大不相交区间数的一道题是hdu2037 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037 题目给出n个区间,问最多有多少个区间没有重叠,只需要对区间右端点进行排序就行,因为一个节目结束得早的话就会为其他节目留下更多的时间,如果选择对节目的开始时
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1010 题目给出一个2e4以内的数,要求把这个数分解成仅含2的幂次方的形式,下图是样例: 由于一个数可以分成多个2的幂次方,可以将其划分为多个子问题,再对每个子问题递归求解,这就是分治算法的精髓。在本题中,分治的最小子问
阅读全文
摘要:题目链接:http://poj.org/problem?id=2182 题目给出一个n,代表牛的数量,编号是1-n,另外给出n-1个数,代表在某个位置之前有多少数是比这个位置的数小的,1之前没有比它小的,所以不给出。想法是最后一个数可以最先确定,如果最后一个数前面有a个数比他小,那他就是第a+1个数
阅读全文
摘要:题目链接:http://poj.org/problem?id=3134 题目给出一个初始的x,要求操作只能是乘与除,问最少需要多少步才能算出x^n。这道题等价于给一个1,只能加或者减,问最少需要多少步才能得到n。可以把n拆开成许多个数相加或者相减,从搜索的角度来讲,用普通dfs的话很可能深度达到10
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2648 代码如下: 1 #include<iostream> 2 #include<map> 3 using namespace std; 4 map<string,int> mp; 5 string s
阅读全文