随笔分类 - hdu
摘要:作者:jostree转载请注明出处http://www.cnblogs.com/jostree/p/4102743.html题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜索不难发现,无论Alice和Bob以何种方式投掷包裹,他们得到的Magic Stones个数的和$Sum$...
阅读全文
摘要:作者:jostree转载请注明出处http://www.cnblogs.com/jostree/p/4092939.html题目链接:hdu 5025 Saving Tang Monk 状态压缩dp+广搜使用dp[x][y][key][s]来记录孙悟空的坐标(x,y)、当前获取到的钥匙key和打死的...
阅读全文
摘要:作者:jostree转载请注明出处http://www.cnblogs.com/jostree/p/4092176.html题目链接:hdu 5094 Maze 状态压缩dp+广搜使用广度优先搜索,dp[key][x][y]表示在拥有钥匙key并在坐标(x,y)时需要的最少的步数,key的二进制的第...
阅读全文
摘要:作者:jostree转载请注明出处http://www.cnblogs.com/jostree/p/4080264.html题目链接:hdu 4850 Wow! Such String! 欧拉回路长度为4的由26个字母组成的字符串一共有$4^{26}$种,从aaaa开始,在加上结尾的aaa那么该字符...
阅读全文
摘要:题目链接:hdu 2824 The Euler function计算欧拉函数,欧拉函数$\phi(x)$等于不超过$x$且与$x$互质的整数的个数。这里有两种求解方法:方法一:显然欧拉函数有如下三个性质:1、$\phi(x=p) = p-1$,当$x$是质数时,$k\in[1,p-1]$的$p-1$...
阅读全文
摘要:原题链接:hdu 1576 A/B同样是用扩展的欧几里得算法。A = 9973k+n = xB,从而转化为:xB-9973k=n求解x即可。具体扩展欧几里得算法请参考:hdu 2669 Romantic代码如下: 1 #include 2 #include 3 #include 4 #incl...
阅读全文
摘要:原题链接:hdu 2669 Romantic使用扩展的欧几里得算法。对于初始的两个整数$x_1,y_1$,我们一定可以计算出$ax_1+by_1 = gcd(a,b)$,递推下一步,我们可以得到公式:\begin{equation} ax_1+by_1 = gcd(a,b) = gcd(b,a\%b...
阅读全文
摘要:题目链接:hdu 4267 A Simple Problem with Integers类似于题目:hdu 1556 Color the ball的技巧实现树状数组的段更新点查询。由于该题对于段的更新并不是连续的,从而可以构造多个树状数组。因为$k \in [1,10] $,从而可以把更新划分为如下...
阅读全文
摘要:题目链接:hdu 1394 Minimum Inversion Number该题是求最小逆序对的扩展。可以使用树状数组来实现。对于$n$个数的序列$A$,其第$i$个数($i\in [0,n)$)的逆序数$r_i$可以表示为它的角标$i$减去在它之前且不大于它的数的个数。例如对序列A = {1,3,...
阅读全文
摘要:首先对每行进行排序,并对与前两行有$A = a_1 \leq a_2 \leq \cdots \leq a_k$和$B = b_1 \leq b_2 \leq \cdots \leq b_k$。首先把所有的$b_i , i\in [1,k]$与$a_1$进行求和,并加入优先队列中。其中最小的必然是$...
阅读全文
摘要:题目链接:hdu 1754 I Hate It线段树模板题。该题是对点进行更新,对区间进行查询,在初始化时为了方便把n扩充为了2的整数次幂。并且注意线段树应该开辟4倍于n的数组来存储。注意对于输入字符'Q','U',一定不能用char c;scanf("%c",&c);来接收,这样会接收到上次输入的...
阅读全文
摘要:题目链接:hdu 1556 Color the ball可以使用线段树来做,但是使用树状数组会更加简洁,对于第i个点被涂的次数$s$,为$s=\sum_{k=1}^{i}x_k$,因此对于区间$[a,b]$的涂色,对于下标$a$增加1,对于下标$b+1$减少1,这样就可以保证对于$i\in [a,b...
阅读全文
摘要:题目链接:hdu 1166 敌兵布阵标准的树状数组模板题,需要注意的是树状数组的初始节点的编号为1。 1 #define MAX_N 1000007 2 #include 3 #include 4 #include 5 #include 6 using namespace std...
阅读全文
摘要:dp,用dp[i][j],表示和为i的前j个维度的种类。其中arr[i],表示第i维的最大值。则\begin{equation}dp[i][j] = \sum_{0 \leq k \leq \min(i,arr[i])} dp[i-k][j-1] \end{equation}最后取和为sum/2的种...
阅读全文
摘要:贪心算法。需要计算分别以每个字母结尾的且每个字母出现的次数不超过k的字符串,我们设定一个初始位置s,然后用游标i从头到尾遍历字符串,使用map记录期间各个字母出现的次数,如果以s开头i结尾的字符串满足要求,则把结果增加i-s+1。否则的话向前移动s,不断维护map,直到s指向的字母与i相同,从而满足...
阅读全文
摘要:先把各个数字又大到小排列,如果没有前导零并且为奇数,则直接输出。如果有前导零,则输出-1。此外,如果尾数为偶数,则从后向前找到第一个奇数,并把其后面的数一次向前移动,并把该奇数放到尾部。值得注意的是当输入为960时,通过这种方法会得到具有前导零的数字。因此最后需要判断进行移动后,首位是否为零。代码如...
阅读全文
摘要:为了a异或b的和最大,只需另b在不大于n的情况下按位取反即可。这里有两个输出小技巧可以参考:1.在用printf输出__int64时,在windows下使用格式"%I64d",在linux下使用"%lld",在hdu中应使用"%I64d",如果拿不准就是用cout好了。2.在遇到每个数之间有空格,最...
阅读全文
摘要:首先把具有相同颜色的点缩成一个点,即数据离散化。然后使用dp[i]表示涂满前i个点的最小代价。对于第i+1个点,有两种情况:1)自己单独涂,即dp[i+1] = dp[i] + 12)从第k个节点之后(不包括k)到第i+1个节点一次涂完,且一起涂的节点共有num种颜色,即dp[i+1] = dp[k...
阅读全文

浙公网安备 33010602011771号