![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
159739
这个作者很懒,什么都没留下…
展开
-
UVA - 674 完全背包
题意:50,20,10,5,1这5种硬币,输入一个金额,用着5中硬币去凑成这个金额,问有多少种组法。 思路:完全背包模板题#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#in原创 2017-08-08 20:22:03 · 226 阅读 · 0 评论 -
UVA - 562(01背包)
题意:给定n个硬币,要求将这些硬币平分以使两个人获得的钱尽量多,求两个人分到的钱最小差值。 思路:先将所有硬币的总额算出来为sum,以sum/2为背包容量,算出dp[sum/2],然后abs(sum-2*dp[sum/2])就是最小的差值;#include<iostream>#include<algorithm>#include<string>#include<cstring>#inclu原创 2017-08-06 16:32:57 · 207 阅读 · 0 评论 -
HDU - 2955 (01背包)
题意:Roy想要抢劫银行,每家银行多有一定的金额和被抓到的概率,知道Roy被抓的最大概率P,求Roy在被抓的情况下,抢劫最多。 思路:由于概率不是整数,所以不能以概率为背包容量,我们以金额为背包容量,dp[i]意义为当抢劫金额为i是被抓概率最小(我们将概率p转换为1-p,求其最大);#include<iostream>#include<algorithm>#include<string>#i原创 2017-08-07 10:16:29 · 157 阅读 · 0 评论 -
HDU - 2639 (01背包)
题意:01背包,要求第k优解; 求第k优解就好比要比较两个班的前十名推出全年级全十,需要将选与不选所有的结果记下来比较;#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#inc原创 2017-08-07 10:39:29 · 228 阅读 · 0 评论 -
POJ - 2923 (01背包,状态压缩)
题意:有n件物品,每件容量为wi,有容量分别为c1,c2的两辆车,问最少要几次才能将这些物品运完; 思路:先用状态压缩将一次能运走的物体压缩成一个状态,将问题转换成01背包;#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<原创 2017-08-07 11:06:20 · 309 阅读 · 0 评论 -
hdu3466(01背包,贪心)
题意:给你一些钱 m , 共有 n 件物品,每件物品有价格 P,价值 V,还有一个很特别的属性 Q, Q 指你如过想买这件物品你的手中至少有这钱Q 。虽然你只要花费钱P,但你的手中至少有钱Q,如果不足Q,不能买。问给你钱M ,列出N件物品,最多能获得多少价值的东西。 思路:如果没Q的限制条件,这道题就是01背包水题。当我们要购买第i件物品,我们已经花费了j-p[i],我们剩余的钱为m-(j-p[i原创 2017-08-07 11:22:05 · 352 阅读 · 0 评论 -
HDU6201 | 2017 ACM-ICPC 亚洲区(沈阳赛区)网络赛-H transaction transaction transaction
题意:一个n个点n-1条边的无向图,每个点每条边都有权值,求一条路径W终点-W路径-W起点的最大值; 思路:dp,dp[i]表示以i为终点的路径的最大值,若x于y相连,那么有dp[x]=max(dp[x],dp[x]-Wx-Wxy+Wy);#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<原创 2017-09-11 20:49:13 · 445 阅读 · 0 评论 -
CodeForces 429B Working out
题意:有两个老哥分别从左上角走到右下角,左下角走到右上角,中途要求相遇一次,相遇处的权值不算,求两位老哥的路径权值最大和;思路:dp1[i][j]为左上角走到坐标i,j的最大值,同理有dp2,dp3,dp4分别对应其他三个角,那么答案为:max(max(sum,dp1[i][j-1]+dp3[i+1][j]+dp2[i-1][j]+dp4[i][j+1]),max(sum,dp1[i-1][j]+...原创 2018-04-07 15:36:45 · 144 阅读 · 0 评论 -
ZOJ 3747
参考博客:https://blog.csdn.net/cc_again/article/details/24841249题意:给出长度为n,由字符'G','P','R',组成的字符串,要求至少有m个连续的'G’,至多有k个连续的'R'。问有多少满足条件的字符串。思路:可以转换成求最多有n个连续的'G',至多有k个连续的'R'的字符串数量sum和最多有m-1个连续的'G',至多有k个连续的'R'的字...原创 2018-04-07 15:52:02 · 215 阅读 · 0 评论 -
UVA - 10328
题意和思路于zoj3747类似zoj3747博客链接:https://blog.csdn.net/qq_36542637/article/details/79842141只不过数据范围大,使用了java大数类import java.math.*;import java.util.*;public class Main { public static BigInteger dp[][] = n...原创 2018-04-07 15:55:57 · 171 阅读 · 0 评论 -
Ural 2018 The Debut Album
题意:一个由’1‘,‘2’组成的长度为n的字符串,要求连续的1不超过a个,连续的2不超过b个,求满足条件的字符串的数量,答案模1e9+7; 思路:dp[i][j]表示长度为i,以j结尾,满足条件的字符串的数量;#include<bits/stdc++.h>using namespace std;const int Mod=1e9+7;long long dp[50005][...原创 2018-04-14 15:02:43 · 183 阅读 · 0 评论 -
codeforces761 C. Dasha and Password
题目大意:这是一个类似组合密码的东西。初始状态密码设置在第一列,我们可以通过拨动来改变每一行的密码。合法的密码必须满足三个条件:1.至少有一个数字。2.至少有一个小写字母。3.至少有一个特殊字符(*&#)问最少拨动多少下就能得到合法的密码。思路:分组背包加状态压缩#include <bits/stdc++.h>using namespace std;char s[55];...原创 2018-03-28 21:23:47 · 151 阅读 · 0 评论 -
CodeForces - 337D Book of Evil (树形dp)
题意:有一颗有n个结点的树,树上存在一个污染源(位置不确定),它可以污染与它距离不超过d的节点,现给出m个被污染的节点(污染源本身也可能是被污染的节点),求污染源可能的位置数。思路:树形dp,树的最长链,dp[i][0]表示i到i的子树中最远污染源的距离,dp[i][1]表示i到i的子树中次远污染源的距离,dp[i][2]表示i经过i的父节点到最远污染源的距离。那么污染源到这些被污染的点的最远...原创 2018-07-24 14:50:28 · 717 阅读 · 0 评论 -
UVA - 624 (01背包,记录路径)
简单的01背包,可以用笨方法记下路径 代码如下:#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#defin原创 2017-08-06 16:17:32 · 252 阅读 · 0 评论 -
HDU - 2546 01背包
01背包的变形,因为当剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负;那么我们只需要一开始将余额减去5,将价值最大的物品拿出,然后求出当此时所能购买的最大价值,再用m+5减去最大价值和价值最大的物品就得出最后的答案了;#include<iostream>#include<algorithm>#include<string>#includ...原创 2017-08-06 16:09:08 · 184 阅读 · 0 评论 -
POJ - 3624 01背包
典型的01背包#include#include#include#include#include#include#include#include#include#include#define MAXN 33000#define INF 0x3f3f3f3f#define lmid l,m,rt<<1#define rmid m+1,r,rt<<1|1#define l原创 2017-08-06 15:59:30 · 184 阅读 · 0 评论 -
UVA - 147 完全背包
#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF原创 2017-08-08 20:25:44 · 186 阅读 · 0 评论 -
POJ - 3181 完全背包
题意:Farmer John 想知道,在一家商品价格为1至K (1 <= K <= 100)的店有多少方法能正好花完他的N(1 <= N <= 1000)元钱 。商品数量充足。 思路:完全背包,dp[j]表示价格为j时花光钱的方法数,所以状态转移方程为dp[j]+=dp[j-i](i为商品价格) 因为方法数过大超longlong了,所以开两个longlong数组将大数存下;#include<io原创 2017-08-08 20:34:03 · 246 阅读 · 0 评论 -
POJ - 1787 完全背包,记录路径
题意:你有1,5,10,25四种硬币数量有限,你想买价格为p的咖啡,问你能不能购买,要求花的硬币尽量多,并且输出每种硬币花了多少; 思路:看起来像多重背包加记录路径但用完全背包比较好写#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#inc原创 2017-08-08 20:40:04 · 440 阅读 · 0 评论 -
POJ - 3260 完全背包和多重背包
题意:农夫约翰要购买价格为T的物品,他有N种硬币,每种硬币的面额为Vi,数量为Ci,同时店主也只有这几种面额的硬币,但数量无限,问约翰总共要经手的硬币数量(约翰买东西给店主的硬币数量+店主找钱给约翰的硬币数量=约翰经手的硬币数量)(约翰是多重背包,店主是完全背包) 思路:我们用约翰所拥有的硬币总额来做背包容量是肯定不行的; 可以注意到,上界为w*w+m(w最大面额的纸币),也就是24400元。(原创 2017-08-09 11:30:12 · 1084 阅读 · 0 评论 -
POJ - 2063 完全背包
#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF原创 2017-08-09 12:47:51 · 277 阅读 · 0 评论 -
zoj3623
#include <stdio.h>#include <string.h>#include <stdlib.h>const int N = 35;const int M = 1000;int n,l;int v[N],w[N];int dp[M];int max(int a, int b) {return a > b ? a : b;}int main(){ int i,j,k原创 2017-08-09 12:54:31 · 210 阅读 · 0 评论 -
HDU - 1114完全背包模板题
题意:你有一个存钱罐,空的时候质量为E,满的时候为F,你有N种硬币价值为P,质量为W,问把存钱罐状满的最小价值; 思路:完全背包模板题#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stac原创 2017-08-09 16:18:51 · 334 阅读 · 0 评论 -
HDU - 1059 多重背包模板题
题意:有价值为1,2,3,4,5,6的物品,每种物品都有一定数量,问这些物品能不能平分成价值相同的两份; 思路:多重背包模板题,以价值总额的一半为背包容量#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#in原创 2017-08-09 16:21:26 · 603 阅读 · 0 评论 -
HDU - 2191 裸多重背包
#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF原创 2017-08-09 16:22:50 · 176 阅读 · 0 评论 -
POJ - 1276 裸完全背包
题意:要取价值为cash的钱,ATM机里面有N种面额的钱,每种面额为Ni,数量为Di,问最多能取出多少钱(要小于等于cash); 思路:以cash为背包容量,多重背包#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmat原创 2017-08-09 16:27:42 · 343 阅读 · 0 评论 -
POJ - 2392 多重背包
题意:有K种块,每种高度为Hi,数量为Ci,拿这K种块去建塔,每种块再塔中所处的高度不能超过Ai,问塔最高能有多高; 思路:首先因为每种块所出的高度不能超过Ai,那么这个塔的最大高度不会超过max(Ai),以max(Ai)为数组大小,为了保持结果能最优应保证Ai小的在下层,所以应该以Ai从小到大排序,之后每次以Ai为背包容量去求解;#include<iostream>#include<algor原创 2017-08-09 16:36:23 · 259 阅读 · 0 评论 -
HDU - 2602(01背包)
典型的01背包#include#include#include#include#include#include#include#include#include#include#define MAXN 33000#define INF 0x3f3f3f3f#define lmid l,m,rt<<1#define rmid m+1,r,rt<<1|1#define l原创 2017-08-06 15:56:13 · 167 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第一场)B Symmetric Matrix
B Symmetric Matrix链接:https://www.nowcoder.com/acm/contest/139/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576K64bit IO Format: %lld题目描述Count the number of n x n matrices A satis...原创 2018-07-20 15:55:35 · 203 阅读 · 0 评论