
DP
dp
kelianlee
这个作者很懒,什么都没留下…
展开
-
P1725 琪露诺(单调队列优化dp)
#include <iostream>#include <algorithm>using namespace std;const int inf=0x3f3f3f3f;int dp[200001];int maxq[200001];int num[200001];int main(){ int n,l,r; scanf("%d%d%d...原创 2019-12-01 16:54:52 · 177 阅读 · 0 评论 -
Secret of Chocolate Poles Gym - 101986A(dp)
定义dp[i]为长度为i的方案数量,很容易推出状态转移,当前的状态为i减去一黑一白的状态+1+当前状态减去(k+1)即k+一个白色#include <iostream>#include <algorithm>using namespace std;typedef long long ll;int main(){ ll dp[111]; ...原创 2019-11-29 20:35:29 · 112 阅读 · 0 评论 -
leetcode 32. 最长有效括号
用区间dp O(n3)超时dp[i]表示以i这个字符为终点的最长连续括号class Solution {public: int longestValidParentheses(string s) { int ans=0; int dp[100000]; int n=s.size(); memset(dp,0,siz...原创 2019-11-21 15:34:44 · 89 阅读 · 0 评论 -
剑指offer 剪绳子(区间dp)
区间dpdp[i][j]表示[i,j]这个区间的最大值,那么dp[i][j]=max(dp[i][j],dp[i][k]*dp[k+1][j])注意初始化就好了#include <iostream>#include <algorithm>#include <cstring>using namespace std;int dp[111][...原创 2019-11-20 21:02:01 · 116 阅读 · 0 评论 -
leetcode 198. 打家劫舍
题目给你一个数组问你子序列满足相邻两者的子序列不是相邻的在原数组中的最大的和是多少思路我想到的是n2的dp,定义dp[i]为以i为结尾的最大不相邻子序列的和那么dp[i]=max(dp[i],dp[j]+num[i])//j>0&&j<i-1后来看了on的做法其实也很好理解class Solution {public: int rob...原创 2019-11-14 19:54:19 · 102 阅读 · 0 评论 -
Brackets POJ - 2955(最长括号序列匹配)
题意给你一些括号问你最大的匹配括号数是多少思路区间dp定义dp[i][j]表示i到j这个区间的最大匹配数如果s[i]与s[j]是一堆匹配的括号即"'[]","()"那么dp[i][j]=dp[i+1][j-1]+2;dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j])初始化dp为0如果题目问的是加最少的括号使得该序列满足所有都匹配的话...原创 2019-11-14 19:48:55 · 178 阅读 · 0 评论 -
Robberies HDU - 2955(01背包dp变形)
题意给你一个人被抓最大概率和n个银行,每个银行有被抓概率与钱问你在不被抓的情况下得到的金钱最大值思路会想到把最大被抓概率当作背包容量,然后每个银行的被抓概率当作花费,钱当做价值。但是这种想法是错误的首先概率的相加就不对,其次对于小数无法用数组来表示。这题的正确思路应该是:把金钱当作花费,把概率当作价值,那么dp[i][j]表示:当金钱为i时不被抓的最大概率。dp[i][j]=max(d...原创 2019-05-17 15:42:48 · 193 阅读 · 0 评论 -
最大报销额 HDU - 1864(01背包dp)
题意你在说nm????01背包dp就可以,注意当没有花费的01背包,只有价值的01背包 dp[j]=max(dp[j],dp[j-c[i]]+c[i]),对于浮点数*100,答案再处100#include <iostream>#include <cstdio>#include <algorithm>#include <cstring&g...原创 2019-05-17 17:03:42 · 176 阅读 · 0 评论 -
Bone Collector HDU - 2602(裸01背包dp)
#include <iostream>#include <algorithm>#include <cstring>using namespace std;int dp[1111];int c[1111];int w[1111];int main(){ int T;cin>>T; while(T--) { int n,v...原创 2019-05-17 21:19:02 · 148 阅读 · 0 评论 -
Coins HDU - 2844(多重背包+二进制拆分)
题意有n个物品,给你背包容量m,每个物品有价值=费用=ai,还有件数ci问你在[1,m]之间有多少种组合方式思路由于价值=费用,所以只要用多重背包求出dp,对dp[i]==i就是可以的。???其实我也不知道为什么,呜呜呜。#include <iostream>#include <cstdio>#include <algorithm>#in...原创 2019-05-17 23:56:33 · 320 阅读 · 0 评论 -
FATE HDU - 2159(二维背包)
留原创 2019-05-18 18:20:33 · 147 阅读 · 0 评论 -
背包九讲--笔记
贴https://blog.youkuaiyun.com/yandaoqiusheng/article/details/84782655#include <iostream>#include <cstdio>#include <complex>#define A 1000010using namespace std;int f[A], w[A], v[A];...转载 2019-05-17 14:08:11 · 140 阅读 · 0 评论 -
P1776 宝物筛选_NOI导刊2010提高(02)(完全背包+二进制优化+单调队列优化)
#include <iostream>#include <algorithm>using namespace std;int dp[111111];int p[111],w[111],c[111];int main(){ int n; int w1; cin>>n>>w1; for(int i=1;...原创 2019-05-17 14:05:25 · 171 阅读 · 0 评论 -
Dividing HDU - 1059(多重背包+二进制优化)
题意给你6件物品每日物品的价值与花费都是i,并且每件物品有最多p[i]件,问你能不能将物品平分成两份思路先把总价值求出来,如果总价值是奇数明显不可能。对与第i件物品,如果价值i*p[i]大于背包容量,那么就变成完全背包问题了,否则用多重背包求解。#include <iostream>#include <algorithm>#include <cs...原创 2019-05-17 12:43:44 · 192 阅读 · 0 评论 -
Codeforces 429B B. Working out(基础dp)
对于单个的简单问题与数塔一样dp[i][j]表示走到(i,j)这个点的最大值对于从左上角走到右下角因为中途会有碰到的点,所以我们对于碰到的点将路分成两段,一段是从左上角走过来的最大值,一段是从右下角走过的,然后求出4个dp,再暴力枚举就可以了。#include <iostream>#include <ctime>#include <algorithm&g...原创 2019-05-03 23:09:03 · 213 阅读 · 0 评论 -
Attack on Titans ZOJ - 3747(分类dp)
#include <iostream>#include <cstdio>using namespace std;typedef long long LL;const int mod = 1000000007;const int maxn = 2000010;LL dp[maxn][3];int n,m,k;LL solve(int u,int v){ ...原创 2019-05-05 16:25:11 · 175 阅读 · 0 评论 -
The King’s Ups and Downs HDU - 4489(计数+dp)
题意给你一个n问你对这n个人排列使得是波浪型的方案数有多少题解我们定义这n个人是1,2,3......n的从小到大的排列方式,当遍历到第i个人时,我们要将这个人插入到前面的i-1个人中,那么我们要怎么插入呢,假设我们插入的这个位置为k,那么k前面的两个人应该满足是下降的,后面的两个人应该是满足上升的,。然后就可以dp啦。dp[i][0]表示有i个人满足最后两个人是下降的种数dp...原创 2019-05-08 14:19:44 · 214 阅读 · 1 评论 -
Number String HDU - 4055(留)
留原创 2019-05-08 14:48:15 · 160 阅读 · 0 评论 -
Painting Storages ZOJ - 3725(组合计数dp+两种思路)
题意有n个球要求你染成至少m个连续红色的方案思路dp[i]表示在i这个位置放红色球至少有m个红色球连续的方案数当i<m时显然答案为0当i==m时答案为1当i>m时考虑:1 dp[i-1]因为已经满足>=m所以肯定存在已经至少有m个连续的情况也就是说这时是dp[i]=dp[i-1]*22 从i这个位置之前的所有位置没有满足至少...原创 2019-05-06 14:06:31 · 129 阅读 · 0 评论 -
[Usaco2008 Dec]Hay For Sale 购买干草(01背包dp)
基础01背包dp#include <iostream>#include <algorithm> using namespace std; int dp[55555];int w[5555]; int main(){ int c,h; cin>>c>>h; for(int i=1;i<=h;i++...原创 2019-05-10 19:38:41 · 182 阅读 · 0 评论 -
P1048 采药(01背包dp)
#include <iostream>#include <algorithm>using namespace std;int dp[1111];int w[1111];int v[1111];int main(){ int T,M; cin>>T>>M; for(int i=1;i<=M;i++) ...原创 2019-05-10 19:40:24 · 118 阅读 · 0 评论 -
Proud Merchants HDU - 3466(排序+01背包dp)
#include <iostream>#include <algorithm>#include <cstring>using namespace std;struct node{ int p,q,v;}b[555];bool cmp(node a,node b){ return a.q-a.p<b.q-b.p;...原创 2019-05-10 19:41:28 · 144 阅读 · 0 评论 -
P1616 疯狂的采药(完全背包dp)
典型的完全背包问题for (int i = 1; i <= n; i++) for (int j = 0; j <= V; j++) f[j] = max(f[j], f[j - w[i]] + v[i]);#include <iostream>#include <algorithm>using namespace st...原创 2019-05-11 16:40:45 · 251 阅读 · 0 评论 -
Piggy-Bank HDU - 1114 (完全背包dp初始化)
①要求背包必须装满 求最大值 把f[0]初始化为0,其余初始化为②要求背包必须装满 求最小值 把f[0]初始化为0,其余初始化为#include <iostream>#include <algorithm>#include <cstring>using namespace std;int dp[11111];i...原创 2019-05-11 16:41:34 · 151 阅读 · 0 评论 -
数塔 HDU - 2084(经典dp)
自底向上dp#include <stdio.h>#include <algorithm>int dp[105][105];int a[105][105];using std::max;int main(){ int r,n; scanf("%d",&r); while(r--) { int sum=0; int i,j; sc...原创 2019-05-03 21:09:57 · 133 阅读 · 0 评论