动态规划
小青WA
扣扣1916493526
展开
-
AcWing 187. 导弹防御系统(LIS+dfs)
题意思路对于1~n个导弹爆搜将每个导弹放进上升 ||下降up[] down[]存每个上升||下降序列的最后一位复杂度O(n2^n)代码#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MaxN = 55;int n,a[MaxN],ans,up[MaxN],down[MaxN];//up[]:每个上升子...原创 2021-02-19 23:09:30 · 201 阅读 · 0 评论 -
Codeforces Round #697 (Div. 3) 1475 G. Strange Beauty
题意给你n个数(2e5) a[](2e5)问你最少删掉几个使得剩下的数两两之间一个数是另一个数的因子思路dp[i]表示数组中留下最大值到i有多少个数能留下ans =n -max(dp[]);要使两两之间一个数是另一个数的因子则如果当前最大到i,那么每个i的倍数j(i是j的因子)都能继承更新dp[i]的值,因为如果一个数k是i的因子(包含在dp[i]里) && j是i的倍数,那么k也一定是j的因子 //dp[j]=max(dp[i],dp[j]);代码#in...原创 2021-01-28 02:13:41 · 197 阅读 · 1 评论 -
gym100502 G - Outing (tarjan+分组背包)
题意一辆车容量为V,现有n个人,每个人都有一个对应a[i],表示只有a[i]上车i才肯上车,问这辆车最多承载多少人。思路由于a[i]和i的对应关系可能存在树或者环或者环连着链->树 三种情况,我们可以得知如果存在环这个环必然是所在树的树根。因此对图求强连通分量,每个树所采纳的人数的【下限——树根的辣个强连通分量,上限——全部】,然后对这些树做分组背包求容量V以内的最大人数。ACcode#include<cstdio>#include<ios...原创 2020-05-27 20:14:29 · 261 阅读 · 0 评论 -
codeforces 1288 C.Two Arrays
传送门可将b数组反接在a后面组成一个长度2 *m的非下降数列dp[i][j]到长度为i最大数字到j的情况数量dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % mod;ans =Σdp[m * 2][i] (i∈ [1,n]);ACcode#include<cstdio>#include<iostrea...原创 2020-02-02 21:03:58 · 198 阅读 · 0 评论 -
Gym-101875E Loppinha, the boy who likes sopinha
题意:给你n,k 长度为n的01串 0代表休息 1代表工作 连续工作每天的cost会++递增 最大可承受cost为k 问你从现在的01串 最小修改几个工作日为休息日使得可以承受。思路:记忆化搜索:dfs(位置,翻转次数)从当前pos向后还是工作日的枚举找到后比较取min dfs(当前位置的下一位,翻转次数 - 1) + 这一段工作日所需要的cost当跳出枚举循环时 s[cur...原创 2019-10-26 16:32:02 · 119 阅读 · 0 评论 -
poj1141 最小匹配括号 区间dp
题意给你一个字符串,要你输出最小最短匹配串input:output:思路dp[i][j]—— i ~ j 之间最少匹配几个对。初始化memset(0) dp[i][i] = 1;first.枚举长度 if(is_same(两端)) dp[i][j] = dp[i + 1][j - 1],pos[i][j] = -1;//标记取min(dp[i][j],dp[i]...原创 2019-11-03 13:33:26 · 118 阅读 · 0 评论 -
poj3280 构造回文字符串最小花费-区间dp
题意思路dp[i][j]保存的是i~j这一段已经是回文且最优解那么当我们要求新的区段i~j时只需要考虑s[i] ?= s[j]if(s[i] == s[j]) dp[i][j] = min(dp[i][j],dp[i +1][j - 1]);else dp[i][j] = min(dp[[i][j],min(dp[i + 1][j] + chan[s[i]],dp[i][j...原创 2019-10-30 13:31:51 · 162 阅读 · 0 评论 -
HDU5115 区间dp
题意思路:lengthless~largerdp[i][j] = min(dp[i][j],dp[i][k - 1] +dp[k +1][j] + a[k] + b[i - 1] +b[j + 1]);qaq看注释吧ACcode#include<cstdio>#include<iostream>#include<algorith...原创 2019-10-29 01:25:55 · 146 阅读 · 2 评论 -
Lightoj_1422
题目:求最小要多少件衣服思路初始化dp[i][i] = 1;枚举长度{枚举开头{if(a[j] == a[L] 继承dp[j][L - 1]); dp[j][L]取min forever}};ACcode#include<cstdio>#include<iostream>#include<algorithm>#include...原创 2019-10-27 17:56:55 · 238 阅读 · 0 评论 -
POJ 2955 括号匹配区间dp
题目:给出一串字符 问括号的最大匹配数思路:初始化为0从1开始枚举长度 每段长度答案判断之一段的两端是不是一对括号 是的话 dp[i][j] = dp[i + 1][j - 1] + 2判断完成后dp[i][j]永远取maxAC代码#include<cstdio>#include<iostream>#include<cstring&g...原创 2019-10-27 13:47:25 · 119 阅读 · 0 评论 -
2017 icpc beijing J - Pangu and Stones
题意:给你n堆石头,l,r,每次可以合并区间长度[l,r]的石子,合并代价为石子数目和问你最后能否合并成一堆 0 : 合并代价思路:计算区间石子和的话先求个前缀和方便后面用dp[i][j][k]——区间[i,j]合并成k堆的花费 dp初始化inf对于区间长度len 有1 ~ n,可知对于每个len的[i,j] 初始dp[i][j][len] = 0对于每个len ...原创 2019-10-12 15:21:30 · 228 阅读 · 0 评论 -
codeforces1221D - Make The Fence Great Again
题意:t组,每次给n个篱笆,下面n行给出每个篱笆的初始高度和每次高度++的cost,问你要使相邻的篱笆高度都不一样且只能对篱笆每次++的最小cost。思路:初始化infdp[i][j]——当前到第i个这个位置+jdp[i][j] = min(dp[i][j],dp[i - 1][k] + b[i] * j); dp[i][j]是从dp[i - 1][0 ~ 2]在...原创 2019-09-23 13:26:27 · 298 阅读 · 0 评论 -
Max Sum Plus Plus HDU - 1024
题意:给出m n 求n个数中的m个子段和 的最大值AC代码:嘤嘤嘤好难啊我好菜啊不说了都在注释里了qaq~~~#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string>using namespac...原创 2019-05-19 16:24:31 · 93 阅读 · 0 评论