摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1330分析:经典问题,n 块相同的木板重叠,最多能够伸出桌面多远 对于n张卡片的最佳摆法,我们只需要在n-1张卡片的摆法下面加一张边缘与桌檐重合的卡片,并将所有卡片一起向桌檐外移动。对于一种最佳摆法,其中...
阅读全文
摘要:题目链接:http://poj.org/problem?id=3764分析:好题!武森09年的论文中有道题CowXor,求的是线性结构上的,连续序列的异或最大值,用的办法是先预处理出前n项的异或值,然后在这些值中找出两个值的异或值最大。是基于这样的一个原理,相同段的异或值为0。这题在树中找两个节点,...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5124题意:有n条线段,求被覆盖到次数最多的点的次数分析:1.可以转化成求前缀和最大的问题:将区间改成左闭右开(即右端点加1),排序,从左往右遍历,若为左端点则加一,右端点则减一。2.树状数组,离散化一下...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5119分析:dp[i][j]表示由前i个数组成异或和为j的方法数,则dp[i][j]=d[i-1][j^a[i]]+dp[i][j]; 边界:dp[0][0]=1,其他为0;复杂度40*1e6#inclu...
阅读全文
摘要:题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1113根据样例分析:1、沙漠只有500公里或者更短,这时很简单,一次搞定。2、沙漠600km,怎么办?我们需要保证的是:车到了离沙漠终点还有500km的地方,能恰恰加满油而且不会有任何多余,方案其实...
阅读全文
摘要:题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=41224#problem/B分析:可以设dp[i][j]表示以i结尾长度为j的子序列的个数,那么更新就是dp[i][j]=∑dp[k][j-1],其中ka[i]。而要更新dp值,可...
阅读全文
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1059分析:dp[i][j]表示前i个石头组成两座塔高度差为j的较低塔最大高度状态转移:每次石头都有三种方法:1.放在高塔上:dp[i][j]=max(dp[i][j+t...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191分析:========================================多重背包问题定义&基本实现问题:有个容量为V大小的背包,有很多不同重量weight[i](i=1..n)不同价值...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3664分析:dp[i][j]表示i个数的排列中E值为j的个数。假设现在已有一个E值为j的i的排列,对于新加入的一个数i+1,将其加入排列的方法有三:1)把它放最后,加入后E值不变 2)把它和一个满足A[k...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955分析:被抓概率可以转换成安全概率,Roy的安全概率大于1-P时都是安全的。抢劫的金额为0时,肯定是安全的,所以dp[0]=1;其他金额初始为最危险的所以概率全为0;#include #include...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712分析: 典型的分组背包问题,如果不会的可以看一下背包九讲。 看下背包九讲中的描述: for 所有的组k forv=V..0 for 所有...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114分析:很裸的一道完全背包题,只是这里求装满背包后使得价值最少,只需初始化数组dp为inf;dp[0]=0; 然后直接套入完全背包循环就行了。。。#include #include #include ...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4004大致题意二分最大跳跃能力,判断是否可以在m次内到达对岸!分析:由于求青蛙最小弹跳能力,所以二分不断枚举能力x,再对x判断是否在m次内到达对岸。。。#include #include #include...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2870分析:分别转换成'a','b','c'三种来求,其实就跟hdu1505一样了。。。#include #include #include #include #include #include #inc...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1505分析:这题是HDU 1506 的加强版,定义一个二维数组,d[i][j]表示第i行j列元素在前i行中的最大高度。(以第一行为底)例如测试样例:0 1 1 1 1 1 0 1 1 1 1 11 1 1...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506分析:对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下标假设为r,然后矩阵的面积就是(r-l+1)*1;我们从左到右扫一遍,求出每个点的l保存在l[]数组里,...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2569分析:f(n),n个珠子的合格数;a(n),n个珠子,最后2个相同的合格数;b(n),n个珠子,最后2个不同的合格数;f(n)=a(n)+b(n);a(n)=f(n-1);b(n)=a(n-1)*2...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081 分析:a[i][j]代表第i行,前j个数据的和;那么由a[i][j]可得sum[k][long]=a[k][j]-a[k][i-1];long=j-i+1;sum[k][long]表示第k行,从第...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1025大致思路:设置两个a,b数组,a数组存储数据,b数组存储最长不降序序列。此算法关键在于设计二分查找。#include #include #include #include #include #inc...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1292分析: i代表人数,j代表组数,有dp[i][j]=dp[i-1][j-1]+dp[i-1][j]*j。解释: 前者是第i个人自成一队;后者是第i个人并入已有的队列。特别的,当i==j的时候:f[i...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1978分析:递推DP。dp[][]表示可以到达改点的方法数。刚开始:外循环扫描所有点dp[x][y],而内循环扫描出所有可以到达点x、y的点i、j。那么dp[x][y]就是所有的dp[i][l]之和。#i...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2151分析:DP。思路:全盘扫描。 i表示时间,l表示第几棵树,方程: step[i][l]=step[i-1][l-1]+step[i-1][l+1]。#include #include #incl...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028整数划分问题整数划分 --- 一个老生长谈的问题:描述整数划分是一个经典的问题。请写一个程序,完成以下要求。输入每组输入是两个整数n和k。(1 j时,可以根据划分中是否含有j分为两种情况。若划分中含...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069分析:每种石头有六种方法,那么等效为:有6*n种石头。根据x和y排序(要保证相应的x、y总有x>=y),然后dp[i]= max{s[i].z,s[i].z+dp[j]}(j#include #in...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4223由于n范围较小,完全可暴力。。。#include #include #include #include #include #include #include #include #include #d...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2563解题思路:要分两种情况来考虑,a(n)为向上,b(n)为向左跟向右,f(n)为当前方案数。a(n) = a(n-1) + b(n-1);因为向上只有一个方向。b(n) = a(n-1) * 2 + ...
阅读全文