- 博客(15)
- 资源 (3)
- 收藏
- 关注
原创 完全背包问题
题目:杭电1114 思路:动态规划之完全背包问题题目分析:给出了钱罐开始的重量e和装满后的重量f,然后给你n种硬币,每个价值为p,重量为w,求出最小的价值使钱罐的重量恰好为w如果不存在 输出This is impossible.状态转移方程:f[v]=min{f[v],f[v-w[i]]+p[i]}注意:一道简单的完全背包题(于0-1背包就是第二个for循环倒过来就行了),
2013-01-31 16:29:46 1454
原创 HDU1058 Humble Numbers
题目:Humble Numbers humble number从1为"始祖",剩下的所有数,其实都是在此基础上乘以2,3,5,7演化出来的,代码主要语句:f[t]=min(2*f[i],3*f[j],5*f[k],7*f[l]);#include #include using namespace std;int f[5843],n;int i,j,k,l;int
2013-01-30 16:23:25 2559 3
原创 HDU1421 搬寝室
题目:搬寝室 典型的DP,状态方程:dp[k][i]=min(dp[k-1][i-2]+(a[i]-a[i-1])^2,dp[k][i-1]); dp[k][i] 表示 k 对物品在前 i 个物品的最小值#include#include#include#define N 2005using namespace std;int dp[N/2][N
2013-01-30 16:06:57 1124
原创 HDU1466 计算直线的交点数
计算直线的交点数 我们知道:n条直线互不平行且无三线共点的最多交点数max=1+2+……(n-1)=n(n-1)/2,但本题不这么简单,因为问题问的是:这些直线有多少种不同的交点数? 先来看个统计的方法:假设一共有n=a+b条直线(即n条直线分成2组,分别为a条和b条)则总的交点数= a内的交点数+b内的交点数+a,b之间的交点数我们来分析加入第N条直线的情况(
2013-01-30 14:47:11 1091
原创 HDU2588解析
题目:HDU2588 题意大概:给定N,M(2=M的个数。解法:数据量太大,用常规方法做是行不通的。后来看了别人的解题报告说,先找出N的约数x, 并且gcd(x,N)>= M,结果为所有N/x的欧拉函数之和。 因为x是N的约数,所以gcd(x,N)=x >= M; 设y=N/x,y的欧拉函数为小于y且与y互质的数的个数。
2013-01-26 15:56:56 3968 1
原创 next_permutation函数
next_permutation的函数声明:#include bool next_permutation( iterator start, iterator end );可以看到 next_permutation 的返回值是布尔类型,写了一个标准C++程序:在STL中还有perv_permutation()函数#include #include #include
2013-01-26 14:13:55 11933
原创 莫比乌斯反演
莫比乌斯函数值:int mobi(int n){ int m=1; for(int i=2;i*i<=n;i++) { if(n%i==0) { m*=-1; int k=0; do {
2013-01-25 15:26:18 57607 21
原创 Manacher算法
题目:最长回文 本来这道题可以用扩展KMP或者后缀数组来做,但是我感觉没有必要用青龙偃月刀来削苹果,下面就来介绍Manacher算法:Manacher算法专门用来求某个字符串的最长回文子串,时间复杂度为O(n). 首先,在字符串s中,用rad[i]表示第i个字符的回文半径,即rad[i]尽可能大,且满足: s[i-rad[i],i-1]=s[i+1,i+rad[i]]很明显
2013-01-22 19:59:33 2530
原创 连分数求解Pell方程
学习连分数请猛戳这里。 任何一个有理数一定可以唯一地写成有限连分数;可以证明:任何一个无理数一定可以唯一地写成无限连分数; 上次求Pell方程的特解时,采用的暴力求解,其实还有一种更有效的求解方法,那就是今天我要说的连分数。连分数的求解方法:欧几里德算法 利用连分数求解Pell方程的特解: 题目:Smith's Problem 题意:
2013-01-22 14:11:06 4660
原创 数学经典题目
数学编程中有许多有趣的题目,今天我来带领大家研究几道,以便对正在奋力刷题的ACMer有所帮助! 题目:http://poj.org/problem?id=2229 题意:给定一个正整数,求有多少种方法把它写成若干个2幂次的和。 分析:本题可以用递推的思路,我们可以明确,对于一个正整数,它的2的幂次和的表示分情况讨论 (1)如果为奇数,那么在这个表示中一定含有一个1,把这个1减去,就是的情况了。 (2)如果为偶数,那么也分情况,得到。 代码:[cpp] view plai
2013-01-21 00:22:45 2281
原创 斐波那契数列初级版
从今天开始,我会介绍一些关于斐波那契数列在ACM竞赛中的典型题目,以便广大的ACMer能从中受益,能更好地掌握它,本文名为斐波那契数列初级版,以后还会有斐波那契数列终极版。接下来让我们一起走进斐波那契数列的世界吧! 题目:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=462 题意:已知是斐波那契数列,求如下表达式的值。
2013-01-20 14:06:54 2264
原创 第一类Stirling数和第二类Stirling
第一类Stirling数 s(p,k) s(p,k)的一个的组合学解释是:将p个物体排成k个非空循环排列的方法数。 s(p,k)的递推公式: s(p,k) = (p-1)*s(p-1,k) + s(p-1,k-1) ,1 边界条件:
2013-01-19 23:33:14 16691 2
原创 离散化+树状数组求逆序数
题目:POJ2299 离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围 因为其中需排序的数的范围0---999 999 999;显然数组不肯能这么大;而N的最大范围是500 000;故给出的数一定可以与1.。。。N建立一个一一映射;这里用一个结构体struct Node { int v,order; }p[510000];和一个数组
2013-01-19 14:52:12 7020 2
原创 最长公共子序列问题
最长公共子序列,英文缩写为LCS(Longest Common Subsequence)。 其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。而最长公共子串(要求连续)和最长公共子序列是不同的。 最长公共子序列是一个十分实用的问题,它可以描述两段文字之间的“相似度”,即它们的雷同程度,从而能
2013-01-19 00:40:11 2278
原创 最大子段和
题目:Max Sum/** * 动态规划:计算最大子段和 * 算法描述: * 数组a 有n个元素, 记 s[i] 为从a[0]到a[i]中,包含a[i]的最大子段和 * 则: s[i] 的值为: s[i-1]>0时, s[i-1]+a[i],否则 a[i] * * p[i] 助于记录哪些单元被选择, p[i]=1 表示s[i]计算的结果中中使用了s[i-1]的值
2013-01-18 00:06:14 2835
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人