
动态规划
PaigeWw
这个作者很懒,什么都没留下…
展开
-
hdu2191(多重背包)
多重背包基础题#include #include #include #include #include using namespace std;#define N 100#define INF 25000005int weight[N],price[N],cnt[N];int dp[N*20];int main(){ int T;scanf("%d",&T);原创 2015-08-23 10:42:34 · 334 阅读 · 0 评论 -
hdu2602(01背包基础)
动态规划:背包中最基础问题题意:01背包问题分析:动态方程dp[j]=max(dp[j],dp[j-vol[i]]+val[i]);#include #include #include #include #include #define N 1005using namespace std;int val[N],vol[N],dp[N];int main(){ i原创 2015-08-22 17:46:35 · 390 阅读 · 0 评论 -
hdu3336(KMP+DP)
题意:求字符串中所有前缀跟其相同的子串的总个数? 同样是KMP的应用dp[i]代表的是从 最长前缀到最小前缀的匹配数#include #include #include #include #include using namespace std;#define N 200010char s[N];int dp[N];int nextval[N],len;void g原创 2015-08-20 17:56:17 · 302 阅读 · 0 评论 -
RMQ(ST 与 线段树)eg poj3264
http://blog.youkuaiyun.com/liang5630/article/details/7917702http://www.cnblogs.com/andyzhang2068/archive/2011/07/09/2101892.html原创 2015-07-31 20:06:30 · 457 阅读 · 0 评论 -
hdu2577(模拟 或 DP)
http://acm.hdu.edu.cn/showproblem.php?pid=2577题意:给出n个字符串a~z||A~Z,把字符串打出来的最少按键数,且要保证结束时Caps灯灭。此题可用模拟或DP。模拟:思路简单,但是被坑住半天.........主要是自己思维有漏洞。模拟:我居然用str[100]去接字符串,WA无数。绝望之际将str[100]--->str[105]试一试原创 2015-08-25 17:21:18 · 426 阅读 · 0 评论 -
hdu3127(二维完全背包)
题意:给你一块X*Y的布,然后选做n个围巾,给出n个手帕的长和宽,做出每个手帕会获得相应的利润。题意:问该怎样分配这块布,才能获得最大的利润分析:切割方式就是当前选择的物品作为第一个矩形,在大矩形的右下角切,有两种切割方式。分析:每种方式有2种情况,如下:方式一:方式二:其次:一般的完全背包问题,对于物品的选择顺序是没有要求的,所以限制条件的循环和物品选择的原创 2015-08-24 19:53:16 · 612 阅读 · 0 评论 -
hdu1159(LCS模板题)
题意:求字符串a,b的最长公共子序列的长度(LCS)。分析:LCS模板题。dp[i][j]代表a[i-1]和b[j-1]的LCS长度。分析:动态方程:if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1; 分析:动态方程: else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);#include #i原创 2015-08-25 11:19:50 · 421 阅读 · 0 评论 -
hdu1513(LCS简单应用)
题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符分析:将该字符串与其反转求一次LCS,然后所求就是n减去最长公共子串的长度。分析:但是要注意这里字符串最长有5000,dp[5000][5000]的话就会超内存.........分析:再看在LCS动态规划中,当前dp[i][j]至于dp[i-1][...]相关,就是周期为2,则dp[2][5000]就实现了#incl原创 2015-08-25 11:59:09 · 501 阅读 · 0 评论 -
hdu5410(完全背包的依赖)
完全背包的依赖,属于树形DP#include #include #include #include #include using namespace std;#define N 1005#define INF 25000005int weight[N],price[N],r[N];int dp[N*2];int main(){ int T;scanf("%d",&T原创 2015-08-23 16:30:10 · 330 阅读 · 0 评论 -
hdu1421(线性DP)
题意:n件物体里面,取2*k件(每次2件),每次疲劳度为两件物体质量差的平方,求结束后的最小疲劳度分析:dp[i][j]来表示在前i见物品中选取j对的最少花费。分析:先把重物按质量大小排序一个物品只有可能跟其质量相邻的物品一起拿,质量差的平方才最小(贪心预处理)分析:现在就可以列出动态方程dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(weight[i-2]原创 2015-08-25 10:13:56 · 384 阅读 · 0 评论 -
hdu2519(二维完全背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2159题意:给出:n(还需经验升级),m(忍耐度),k(代表k组数据),s(杀怪数量限制);题意:求:升级后还剩余的最大忍耐度分析:与基础题的差别在于求解问题改变了。dp[i][j]代表杀死i个怪兽,用了j个单位忍耐度后的经验值。分析:那么当dp[i][j]>=n时,任务就完成了。如果再继原创 2015-08-24 16:30:38 · 420 阅读 · 0 评论 -
hdu1231最大连续子序列(简单的动态规划)
#include #include #include #include #include #include #include #include #include #define MAXN 10005using namespace std;int data[MAXN],dp[MAXN];int main(){ int N,i,j; int mx,st,e原创 2015-07-29 13:57:44 · 472 阅读 · 0 评论 -
hdu3496(二维背包问题)
题意:在N张CD中选M张出来,且选中CD播放时间总和不超过L。使喜欢度总和最大。分析:简单二维01背包#include #include #include #include using namespace std;int dp[102][1002];int main(){ int T;scanf("%d",&T); while(T--){原创 2015-08-24 15:38:27 · 678 阅读 · 0 评论 -
hdu1114(完全背包)
完全背包 基础题:http://acm.hdu.edu.cn/showproblem.php?pid=1114#include #include #include #include #include using namespace std;#define N 505#define INF 25000005int weight[N],price[N];int dp[N*20];原创 2015-08-23 10:05:13 · 346 阅读 · 0 评论