12 2011 档案
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1098题意就是,输入k,然后求对于任意的x,使f(x)能被65整除时,最小的a;数学归纳法证明:f(x)=5*x^13+13*x^5+k*a*x第一步:f(0)=0;成立:第二步:假设f(x)能被65整除,则有5*x^13+13*x^5+k*a*x能被65整出;第三步:则f(x+1)=5*(x+1)^13+13*(x+1)^5+k*a*(x+1);根据二项式定理分析题目:f(x+1)=5*(c(13,0)+c(13,1)*x+c(13,2)*x^2+.......+c(13,13)*x^13)+13*(c(5
阅读全文
摘要:http://baike.baidu.com/view/2499752.htm卡特兰数的应用。。。http://acm.hdu.edu.cn/showproblem.php?pid=1023公式:令h(1)=1,h(2)=2,catalan数满足递归式: h(n)= h(1)*h(n-1)+h(2)*h(n-2) + ... + h(n-1)h(1) (其中n>=3) 例如:h(3)=h(1)*h(2)+h(2)*h(1)=1*1+1*1=2 h(4)=h(1)*h(3)+h(2)*h(2)+h(3)*h(1)=1*2+1*1+2*1=5 另类递归式: h(n)=h(n-1)*(4*..
阅读全文
摘要:http://poj.org/problem?id=1742多重背包的题目:才开始不知道怎么来统计最后可以给出多少种价格,因为以前的形式都是给出c[i],w[i],b[i]的这里没有给出,后来自己yy了一下,利用多粗冲背包向01背包转换的第一种方法后最后从1到V里所有出现的不同的金钱数量不就是最终可以给出的各种价格吗。01背包转换的第一种方法o(n^3)肯定会TLE代码如下:View Code #include <iostream>#include <cstdio>#include <cstring>using namespace std;const int
阅读全文
摘要:有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。状态转移方程:f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k<=n[i]}此时他面临的不是01背包的选与不选的问题,而是从n[i]里面选多少个的问题。实现方法:http://acm.hdu.edu.cn/showproblem.php?pid=21911:转化成01背包,将每种背包转换成数量为n[i]的01背包求解View Code #include <iostream
阅读全文
摘要:有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。1:f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v}2:f[v]=max(f[v],f[v-c[i]]+w[i]);完全背包面临的不是对于第i件物品选不选的问题了而是选多少件了问题了。。。所以f[v]的当前状态允许由当前状态推得。实现方法有是那种1:o(n*v)这里正确理解这句经典的话很关键(引用):换句话说,这正是为了保证每件物品只选一次,保证在考虑“选入第
阅读全文
摘要:不多讲,dd大牛的背包九讲如此之经典我们只能慢慢体会了:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。状态转移方程:1:f[i][v]=max(f[i-1][v],f[i-1][v-c[i]]+w[i]);2:for(i=0;i<N;i++){ for(v=V;v>=c[i];v--) { f[v]=max(f[v],f[v-c[i]]+w[i]); }} 自己的理解: 01背包的主要思想是对于这件物品做出选与不选的决定;将空间优化后V必须是逆序的,因为这样才能保证将当前的第i个物品放进去的时候,f...
阅读全文
摘要:1001http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1001&cid=13996原来做过的一道题目,我用的贪心,按比重从大到小排序,然后依次选直到不能再放进来为止。注意两点:1:F[j]可能为0因为题目中说的非负数。记得第一次做的时候wa无数次。。2:选完的时候有2种可能:1:n恰好用完,最后不能再选;2:n有剩余,可能n比较大把所有的都选了还有剩余,可能中间出现不能全部将这间屋子里的换完只能换部分。View Code #include <iostream>#include <cstdio>#inc
阅读全文
摘要:题目就是一个rmq算法的典型应用,关键是将其转化成rmq的形式,因为每个点都是a[i]<=a[i+1]所以对于每一个点记录他的左边与右边,因而可知他的长度(即出现的频率),然后还有一个值记录频率;最后求解是用的很巧妙的方法;View Code #include <iostream>#include <cstdio>#include <cmath>using namespace std;const int max_s = 100007;int f[25][max_s],hash[max_s],pow2[25],a[max_s];struct node{
阅读全文
摘要:http://codeforces.com/contest/133悲剧啊。。又掉了rating。。越做越往下衰了啊。。呜呜。。看着队友们都三道题而且A的时间还很早。自己感觉到了很大的压力,总之要努力啊。。加油。。。A:http://codeforces.com/contest/133/problem/AYou have to figure out whether executing this program will produce any output.人家明明说了是否处理输出,自己还尝试各种情况,结果wa三次才过。B:http://codeforces.com/contest/133/pr
阅读全文
摘要:好丢人的比赛啊。。一个都没对。。无语中。。考虑不全啊。。http://codeforces.com/contest/134/problem/A本来才开始考虑小数来,可最后还是在抓时间结构wa了。。就是很简单的求平均数然后在查找的过程。注意平均数可能是小数。。http://codeforces.com/problemset/problem/134/B题意:给出原始数对(1,1)到(n,x)变换求最小的步数。改变如下:(a,b)-->(a + b, b) or (a, a + b)才开始做的时候以为直接用a+b来替代a,b中较小的那个然后不断这样下去直到出现n。这样肯定保证的步数最小,才是样
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1506才开始以为从前往后找出连续的最长上升序列就行,结果一分析数据根本不行,然后从左往右找出分别找出来上升的最长自序列+连续下降的子序列然后分别求,最后取最大。结果还是不行,卡住了。原来是分别记录该点可延伸的最左边L[i]以及最右边R[i]最后由该点可形成的最大区域面积就是s=a[i]*(R[i]-L[i]+1);在求L,R是不能一个一个的往回找,肯定会超时,而是利用迭代的思想(想当于记录数组吧(dp))来推导。。由于自己的粗心重定向有没去掉贡献了一次无意义的wa。。呜呜。View Code #include
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1864一个0-1背包的题目,自己对背包的理解还是不好啊。将所给的最大报销费用当做背包体积,这里的最大陷阱是单项物品的价值不得超过600元(指的的是这一类产品)贡献了很多wa无语,还有就是数据的处理了。(计算内存1k=1024b);View Code #include <iostream>#include <cstring>#include <cstdio>using namespace std;const int max_s = 3000001;//靠计算的。。int f[
阅读全文