随笔分类 -  算法集

上一页 1 2
POJ 3090 Visible Lattice Points 【欧拉函数】
摘要:题目: http://poj.org/problem?id=3090题意: 如题, 实质是求给出一个n, 求出ψ(1) + ψ(2) + ψ(3) + ... ψ(n). ψ(i) 是欧拉函数, 表示在 1..i内是i的质因子的个数. 要求ψ(i), 由 i = p1^(a1)*p2^(a2)*p3(a3)...*pi^(ai) 可推出 ψ(i) = i(1 - 1/p1)(1 - 1/p2)...(1 - 1/pi); pi表示i的素因子.代码:#include <iostream>#include <cstdio>#include <algorithm> 阅读全文
posted @ 2011-05-06 11:40 Kenfly 阅读(360) 评论(0) 推荐(0)
POJ 3088【组合数学DP】
摘要:题目:http://poj.org/problem?id=3088题意: 给出一个整数B (1<=B<=11), 表示有1 2 3 ... B 这B个数, 可选择其中的N (1<=N<=B)个数(不用按顺序), 并用若干个括号将它们括起来. 如B = 2 时: 有 (1), (2), (12), (1)(2), (2)(1) 这5种情况 要求出所有情况的总数.解题思路: 看懂题意后, 马上做的是找算公式找规律, 但式子很复杂. 半途而废了. 后来找出了一条DP式如下: 设D[i] 表示有 i 个数时可以组成的所有情况总数 那么有 D[i] = C(i... 阅读全文
posted @ 2011-05-05 01:32 Kenfly 阅读(381) 评论(0) 推荐(0)
HDU 2870【DP_求最大矩阵】
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2870题意:给出一个字符矩阵Matritx[][], 求其最大子矩阵, 详细如题.解题思路: 将全部字符依次转化a, b, c, 再分别求出这三个矩阵的最大子矩阵即可. 于是, 问题转化为求矩阵中最大的子矩阵了. 设置一个变量Num[][]记录位置的最大高度, Num[i][j]表示Matritx[i][j]位置上的最大高度 这样, 只要枚举以各个Num[i][j]为矩阵最小高度, 分别向前后推进扩展矩阵, 如果Num[i][j + 1] >= Num[i][j]则可以向前扩展, 同理Num[i. 阅读全文
posted @ 2011-04-18 18:42 Kenfly 阅读(988) 评论(0) 推荐(0)
HDU 1385【两点间最短路, DIJK + 记录路径】
摘要:题目: http://acm.hdu.edu.cn/showproblem.php?pid=1385解题思路: 对每一个询问, 跑一次dijkstra算法, 麻烦的是题目要求输出路径, 有多组解时还要是字典序最小的那条. 代码复杂了点, 但思路很简单, 用一个全局变题Path[]来记录父结点就可以了, 即前一个结点, 如 : Path[i] 表示 当前点 i 是由 Path[i] 得来的. DIJK跑完后, 可以从终点向前一直寻找前一个结点, 直到遇到始点, 可以得到一条完整的路径. 当有多组解时, 在松驰时候要加多一个判定条件, 判断当前得出的路径的字典序是否小于以前的就可以了.#inc.. 阅读全文
posted @ 2011-04-07 16:23 Kenfly 阅读(903) 评论(0) 推荐(0)
HDU 1074【状态压缩DP】
摘要:题目: http://acm.hdu.edu.cn/showproblem.php?pid=1074题意: 学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一天则扣掉一单位学分, 要你求出完成所有作业而被扣最小的学分, 并将完成作业的顺序输出.解题: 刚开始以为是背包, 但背包难以记录输出顺序, 所以只能换另一种DP方式, 这里科目最大数目才15, 只要有全枚举的思想来DP就可以解决了, 有一个专有名词叫状态压缩DP. 状态压缩DP采用二制进的思想, 1, 0分别代表有或否. 如: 3的二进制为 11, 则代表完成了每一,二个科目的... 阅读全文
posted @ 2011-03-30 22:45 Kenfly 阅读(3364) 评论(6) 推荐(1)
codeforce 一道贪心题
摘要:原题目: http://codeforces.com/contest/68/problem/B题意: 给出N个能量值a1, a2...an, 能量之间能互相转换, 但转换时会有k百分比的损失, 要求出最后各能量值相等时的最大值.解题思路: 设最后达到平衡时能量值为 x, 则在转换时总共损失了能量 (1式)(a1 + a2 +...+ an ) - N * x . 对于每一个a值,如果 a > x, 那么它必须要转换 a - x 单位能量, 之间损失 (a - x) * (k / 100), 问题是我们如何知道 ai 是否大于 x 呢? 这是问题所在也是解题的关键.我们可以从反面来进行贪心 阅读全文
posted @ 2011-03-19 11:39 Kenfly 阅读(573) 评论(0) 推荐(0)
USACO_humble
摘要:1 /* 2 ID: Kenfy21 3 PROG: humble 4 LANG: C++ 5 */ 6 /* 7 题意: 给出一个素数的集合{p1, p2, p3}, humble numble 的定义是p1, p1*p2, p1*p3, p1*p1,p1*p2*p3...... 8 输入:k(素数个数), n 9 然后输入k个素数, 让你求出第n个humble numble的值(按从小到大顺序)10 11 解题思路: 这是一道比较经典的动态规划题目. 如果我们求出第i个humble numble, 则第i+1个humble numble的值为各个素数与前边i个所求12 13 出的humb. 阅读全文
posted @ 2011-02-18 13:08 Kenfly 阅读(300) 评论(0) 推荐(0)
GOJ 1132[树状数组]
摘要:[查看题目] 什么是树状数组?既然是数组,怎么可能是树状的? 当然可以!这里说的树状并不是指物理空间上的树状,就像用数组来实现二叉堆一样,数组怎么可能是"堆"呢.下面是树状数组的结构图,对树状数组的解释百度百科上已经很详细了,这里不再详细.树状数组可以用来快速求出某个范围内数据之和,但本人觉得它最强大的是能动态快速地修改或增加数据. [百度百科_树状数组] 题目意思是N头牛排成一行(即X轴),给出每个牛的volume threshold(听觉范围??)和一个坐标coordnate,两头牛这间交流必须至少产生一个volume值,这个volume值等于两头牛的距离乘以这两头牛的 阅读全文
posted @ 2010-11-22 14:00 Kenfly 阅读(305) 评论(0) 推荐(0)
GOJ 1146
摘要:[栈]http://222.200.98.145:8000/JudgeOnline/showproblem?problem_id=1146 这题解法不多,我只想到递归式解法.这道题想出解法不难,但如果对栈没有很好地理解实现起来是很棘手的.递归的解法最容易想了,但这里字符串长度可达350000, 递归很容易TLE, 曾写过一个递归的,TLE了. 只能用递归的思想->栈来写,也就是说用栈模拟递归. 解法思路: 从字符串左往右遍历, 遇到'(' , 放进栈里, 栈size加1.遇到')'时,开始处理.前面必有一个'('与之对应,则这对'( 阅读全文
posted @ 2010-11-21 16:05 Kenfly 阅读(483) 评论(0) 推荐(1)
POJ 1001
摘要://高精度,调试了很久,烦代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <cstring> 5 #include <vector> 6 #include <algorithm> 7 8 using namespace s 阅读全文
posted @ 2010-11-19 22:50 Kenfly 阅读(163) 评论(0) 推荐(0)
HDU 1530 最大团问题
摘要:基本上没有用上什么优化, 只是简单地搜索代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <cstring> 5 #include <algorithm> 6 #include <vector> 7 #include < 阅读全文
posted @ 2010-11-08 17:24 Kenfly 阅读(761) 评论(1) 推荐(0)
HDU 1083
摘要:HDU 1083 http://acm.hdu.edu.cn/showproblem.php?pid=1083PKU 1469 http://poj.org/problem?id=1469【二分匹配】网络流版本:HDU 1083Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 //只要求出course的最大匹配数,再跟P比较即可.网络流实现 2 #include <iostream> 3 #include <cstdio 阅读全文
posted @ 2010-11-03 15:50 Kenfly 阅读(624) 评论(0) 推荐(0)
HDU 2487
摘要://HDU 2487注意完全包围等情况#include <iostream>#include <cstdio>#include <queue>#include <string>#include <cstring>#include <algorithm>using namespace std;const int NMAX=101;char wmap[NMAX][NMAX];bool isTop( char id, int start, int n, int m ){ int si=start/m, sj=start%m; i 阅读全文
posted @ 2010-10-03 00:32 Kenfly 阅读(330) 评论(0) 推荐(0)

上一页 1 2