dp
你的目光看海
这个作者很懒,什么都没留下…
展开
-
zzuli 1904
感觉很奇妙的一道dp题,感觉莫名其妙不知道感觉不能解的题一般都是dp写>-< , 我只是学长解法的搬运工: 我们可以用动态规划解决,dp[i][j]表示进行了i次交易面对第j个价格的最大获利。那么 dp[i][j] = max(dp[i][j-1], max(dp[i-1][r-1] + a[j]- a[r])(r<=j)) 我们要找到最大的dp[i-1][k],如果再加一层循环的话就会超时原创 2016-08-11 11:05:22 · 574 阅读 · 2 评论 -
poj 1185
链接:http://poj.org/problem?id=1185 分析:一道经典的状压dp,坑点是如果开dp[100][1<<10][1<<10]会爆内存,其实根本不用开这么打的空间。只需将所有可能的状态找到就行了,用这个代码: int num = 0; for(int i=0; i<(1<<10); i++) if(judge_one(i)) n原创 2017-02-14 21:50:50 · 271 阅读 · 0 评论 -
hoj 2662
链接:http://acm.hit.edu.cn/hoj/problem/view?id=2662 题意: 有一个n*m的棋盘(n、m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻)。求合法的方案总数。 分析: 经典的状压dp。 设状态dp[n][num][k]: 第n行时,已经放了num个棋子,并且第n行的状态是k。 可得状态转原创 2017-02-12 20:03:00 · 506 阅读 · 0 评论 -
poj 3254
链接:http://poj.org/problem?id=3254 分析:一道经典的状压dp,核心是将排列方式看做01串,用十进制表示 代码:/*2017-2-11 15:51 author:lian*/#include <iostream>#include <algorithm>#include <cstdlib>#include <cstdio>#include <cstrin原创 2017-02-11 15:56:02 · 318 阅读 · 0 评论 -
zzulioj 1875
题目链接:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1875题目大意:一个n*m矩形上分布着价值不等的财宝,两个人从【1,1】点只能朝下或右走,经过一点就将该点财宝拾起,该点不再有财宝。问他俩从【n,m】点离开时最多获得多少价值的财宝?分析:刚开始会很容易想到分别对两个人dp,接着求和获得答案。但这是不对的,因为两个人并非完全没有关系,所以必须原创 2017-02-09 19:57:00 · 2661 阅读 · 0 评论 -
poj 1712 分组背包
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712题意:该学生有 m 天去修 n 门课 , 对于第 i 门课 , 花 j 天修它将会获得 A[i][j] 个学分 , 问你该生最多获得多少学分。思路: 对于每门课如果你花了 1 天 ,你就不能再花 2 天去修它。 也就是说每门课只能选择一个特定的天数。 我们将每门课看成一组 , 那么每组只能取一个值 ,原创 2016-12-07 17:57:04 · 418 阅读 · 0 评论 -
light oj 1071
题意: 给一个 r*c 的地图 , 每个点有自己的权值 , 两个人从 (1,1),点向(r,m)点前进, 求两人经过的醉的权值之和。 分析: 这道题不可以分别求两个路径 , 因为这样在决策时没有考虑到对另一个人的影响,我门校赛上有一道这样的题,我分开来写结果wa到结束。。 我们设 dp[step][i][j] 表示两人走了 step 步后分别在第i行和第j行上(列可以计算得出),这样我们便将他们原创 2016-12-04 16:07:41 · 357 阅读 · 0 评论 -
codeforces Round #382(Div2) D
链接: http://codeforces.com/contest/742/problem/D D. Arpa’s weak amphitheater and Mehrdad’s valuable Hoses time limit per test1 second memory limit per test256 megabytes inputstandard input outputst原创 2016-12-08 23:35:47 · 327 阅读 · 0 评论 -
OpenJ_Bailian 4120 dp
解题思路:n个数随意组合,共有2的n次方种组合。设可以到达x的方法有m中,如果缺少了元素 arr[i] ,m=0 ,那么arr[i]就是不可缺少了。 我们用数组f[n] 表示到达 n 的方法有 f[n] 中,数组g[n] 表示在缺少元素 arr[i] 的情况下,到达n的方法,哎,我们就可以用f[n]不断地求出g[i]了。这样就有:#include <iostream>#include <algo原创 2016-08-15 09:58:59 · 390 阅读 · 0 评论 -
51nod 1007 正整数分组
传送门分析:定义dp[i] == true 表示集合中的一些数可以组成i,则对于dp[i]只要dp[i-a[j]]有一个为真它就是真的。代码:#include <bits/stdc++.h>using namespace std;const int maxn = 1e3;int a[maxn];bool dp[11000];int main(){ int n , sum = 0;原创 2017-10-18 19:59:39 · 552 阅读 · 0 评论