问题:写一个函数,计算4 000 000 000 以内的最大的那个f(n)=n的值,函数f的功能是统计所有0到n之间所有含有数字1的数字和。比如:f(13)= 6,因为“1”在“1,2,3,4,5,6,7,8,9,10,11,12,13”中的总数是6(1,10,11,12,13)。传统枚举方法效率低、求解时间长,本文介绍如何采样剪枝操作提高算法效率、降低求解时间。...
分类:
编程语言 时间:
2014-05-22 09:10:59
阅读次数:
336
题目来源:Light OJ 1028
题意:求一个数转化成任意进制后末尾有0的种数 就是一个数因子的个数
思路:一个数可以被分解成若干素数相乘 p1^x1*p2^x2*...*pn^xn
根据乘法原理 因子数为 (x1+1)*(x2+1)*...*(xn+1)
注意剪枝
#include
#include
#include
#include
using namespace st...
分类:
其他好文 时间:
2014-05-22 07:23:04
阅读次数:
247
装载问题同样也是递归回溯法的一个简单应用,用子集树表示解空间显然是最合适的。在递归回溯时,可以进行相应的剪枝。问题的解要满足两个条件:1.首先将第一艘轮船尽可能装满2.将剩余的集装箱装上第二艘轮船由此可知,只要求出不超过第一艘轮船载重量c1的最大值,若总重量-c1#include#include#i...
分类:
其他好文 时间:
2014-05-21 19:20:24
阅读次数:
296
一般求回文子串用的是Manacher算法,但是该算法只是简单判断回文,该题目中需要去除掉空格和标点,所以,自己用了动态规划(加剪枝,取出空号等)。
代码如下:
//最长回文子串 动态规划
#include
#include
#include
#include //for tolower
#define MAXSIZE 5000
char str[MAXSIZE];//="Confucius...
分类:
其他好文 时间:
2014-05-21 16:00:30
阅读次数:
211
POJ 3278 Catch That Cow
题目大意:
告诉你起点位置和终点位置,你可以有三种操作,从某个位置x,可以到达x-1,x+1,2*x,问你从起点到终点最短时间?
解题思路:
利用bfs枚举位置即可
但是刨除以下情况,也就是剪枝一下
1、当x终点位置时,x+1和2*x均不能到达
解题代码:见本文详细...
分类:
其他好文 时间:
2014-05-21 14:33:08
阅读次数:
241
题目大意:
给出一个数n,求m,使得m的长度和n相等,能被k整除。有多个数符合条件输出与n在每位数字上改变次数最小的。改变次数相同的输出大小最小的。
共有三种解法:DP解法,记忆化搜索和DFS+强剪枝的算法。
后两种以后会更新。
1、DP解法:
解题思路:
DP[i][j]表示数n的前i位除以k余j最小改变几位。
DP[len][0]就表示数n被k整除最小改变几位。
根据这个...
分类:
其他好文 时间:
2014-05-18 06:02:56
阅读次数:
319
题目:uva519 - Puzzle (II)
题目大意:给出拼图,要求将给出的拼图拼成 n行m列的矩形,可以输出yes,不行输出no。
解题思路:直接dfs,但是需要剪枝。
1、判断 F 的出现个数是否等于 2 * ( n + m) , 还有IO的个数是否匹配。
2、边界问题要处理,例如第一行第N行,第一列第M列,这些地方的拼图是有要求的,这些边界拼图的的外围都要是F。例如第一行...
分类:
其他好文 时间:
2014-05-15 08:00:13
阅读次数:
259
题意:给你 n 个数,m个询问(c,x,y)
c==0 把x,y区间的值变为原来的平方根(向下取整)
c==1 计算x,y区间的和。
利用1的开方永远为1剪枝。。
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include...
分类:
其他好文 时间:
2014-05-13 15:50:04
阅读次数:
338
给了你n,然后n个数字在一个数组中,接下来m个询问,每个询问三个数字 t,x,y,若t==0,那么修改区间[x,y]的每一个值,变为原来每个位置上的数 开根号取整,若t==1,那么对区间[x,y]求和
由于n,m,很大,所以树状数组铁定超时,若直接用线段树来做区间修改,那么也是超时,这类题目没别的方法了,静心剪枝,发现题目给的数据范围为2^63,有没有发现,2^63开根号 绝对不需要开1...
分类:
其他好文 时间:
2014-05-12 23:01:59
阅读次数:
479
题目链接
迭代加深搜索思想。
枚举答案K,考虑到能否切出K个木头,那么我们当然选最小的K个来切。
1、对于原材料,我们是首选最大的还是最小的?显然,首选大的能够更容易切出,也更容易得到答案。
2、对于目标木头,我们是优先得到最大的还是最小的?显然,由于K个木头我们都要得到,那么当然先把最大的(最难得到的)先得到,这种搜索策略更优。
3、假设总原材料为all,前K个木头总和为sum,那...
分类:
其他好文 时间:
2014-05-09 21:07:28
阅读次数:
305