09 2014 档案
摘要: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的种...
阅读全文
摘要:从左边开始染色,到第$i$个方块为止,红绿都是偶数的方案数为$a_i$,红绿恰有一个是偶数的方案为$b_i$,红绿都是奇数的方案为$c_i$,从而有如下状态转移方程:$a_{i+1} = 2 \times a_i + b_i$$b_{i+1} = 2 \times a_i + 2 \times b_...
阅读全文
摘要:贪心算法。需要计算分别以每个字母结尾的且每个字母出现的次数不超过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号