dp类
loveicecola
AFO
展开
-
状压dp
这种类型的题是每行只能取一个位置的,并且保证不能相互冲突的棋盘问题。 因为每一行只取一个,所以枚举状态的时候只需要枚举当前的状态#include<iostream>using namespace std;int n,m;int a[30][30];int f[21][1<<20];int ar[21];int ss[21];void...原创 2018-06-13 15:14:52 · 122 阅读 · 0 评论 -
[校内oj1881]项链染色 区间DP
一句话题意:环上区间染色,区间有长度限制,求染成所需颜色的最小次数。分析:先把环拆开。这题首先应该有一个基础的模型:给定一个长度为n的串,每个珠子都有颜色。你可以染一个任意长度的区间,求最小次数。考虑染色的时候其实只有两种情况,一个是先染了一个大区间,然后中间染了一些小的。一个是很多歌小区间拼成一个大区间。设f[i][j]f[i][j]f[i][j]表示(i,j)(i,j)(i,j)...原创 2019-03-31 19:02:05 · 266 阅读 · 0 评论 -
[BZOJ5215商店购物]
BZOJ5215背包很显然,再求一个组合数。复杂度是m4m^4m4前缀和优化一下,复杂度n3n^3n3。菜死了现场没想到优化Coding#include<bits/stdc++.h>#define rint register int#define ll long longusing namespace std;const int N=2e7+10;const in...原创 2019-03-30 20:11:59 · 477 阅读 · 0 评论 -
[bzoj3864]Hero meet devil
又是一道神题,看题解+看代码,三个小时终于会了QAQ。dp套dp的经典题目。什么问题是dp套dp问题?这类问题让你求解的是有多少种方案使得一个dp的最终值为一个特定值。对应到本题来说,是让你求解有多少种长度为m的字符串,与S串的LCSLCSLCS为iii。这类问题,我们一般要观察原本dp的求解过程与自身性质,把内dp尝试压成状态,递推外dp值。考虑LCSLCSLCS的求解过程。f[i...原创 2019-03-22 15:45:25 · 360 阅读 · 0 评论 -
[CF1096D] hard
今天你hardhardhard吗?哎,还是状态的定义啊……菜鸡又要看博客了。设f[i][j]f[i][j]f[i][j]表示到了第iii个点,不能到达jjj状态的最小代价。如果此时j与ij与ij与i匹配上了,f[i][j]=min(f[i−1][j−1],f[i−1][j]+a[i])f[i][j]=min(f[i-1][j-1],f[i-1][j]+a[i])f[i][j]=min(f...原创 2019-03-21 16:24:42 · 213 阅读 · 0 评论 -
[BZOJ1226]学校食堂
在我看来,这是一道难度很大的状压DP。其实,对于我来说,DP,往往状态的设计更为困难,优化倒是次要的。因此,经常性的,随便一道DP题,不知难度如何,都能轻松踩我一顿TAT。这道题折磨我将近一天,最终还是在前辈博客的帮助下,理解了算法。我们来讨论一下解法。首先,对于一个人来说,只有他后面的BiB_iBi个人有可能比他先吃完饭。具体谁先吃谁后吃,并不好递推。发现,BiB_iBi是很小的,我...原创 2019-03-21 16:14:44 · 233 阅读 · 0 评论 -
简单DP(持续更新)
刷刷汤神给的所谓水题,对我来说好难啊QAQCF946D真·水题。什么?你只会n3n^3n3的?不好意思,我也只会n3n^3n3的,刚上去没看时间,一直在考虑如何n2n^2n2或者n2∗lognn^2*log_nn2∗logn。啊,时间给了2s,我在纠结什么啊……写循环的时候,脑子不清醒,迷之写错一个变量,cf连WA 5次终于发现。#include<bits/stdc++.h&...原创 2019-03-20 19:52:26 · 183 阅读 · 0 评论 -
背包第K优解
背包第K优解问题(这个东西其实早就应该会的,鬼知道怎么就拖到现在。一位学弟说自己写了一道背包k有解的题,想了想突然发现自己不太会,我果然好菜啊……)写这篇博客的目的不是说A了这道题来讲思路,那样没什么用。毕竟这是提高甚至普及知识点,没什么可吹嘘的。写此文的目的在于总结第k优解这类问题,下面我们来深入讨论一下。当然,我们仍然以01背包为例。我们在求01背包最优解的时候,有这样一个式子,f[...原创 2019-03-14 15:01:40 · 288 阅读 · 0 评论 -
多重背包
一、我们之前写过完全背包,这个多重背包可以类似完全背包的暴力写法,只不过每个物品的数量是有限的。所以,第一种方法:我们定义阶段,最外层循环的每一个物品i为一个阶段,定义状态为f【i】【j】表示当到达第i个物品空间为j时所能达到的最大价值。然后我们枚举每一个决策k,k代表第i个物品我们用多少个,来更新最优值。复杂O(n*m*k) 二、之前O(n)的枚举决策k显然没有必要,我...原创 2018-10-03 19:36:20 · 333 阅读 · 0 评论 -
luogu P1373 小a和uim之大逃离
这是一道求方案数的题。我很菜,不太会写方案数的题,所以看了下题解,并写下这篇博客。 首先,我们是在一个n*m的格子里走,有两种走法,一个是向右,一个是向下。起点任意,终点任意。在你走的路径上,第奇数个点是小a取走其中的液体,第偶数个点是uim取走其中的液体,必须走偶数个点。我们所要求的是,走到终点后,小a和uim的液体数一样的路径的方案数。 觉得题不好写,主要是觉得需要...原创 2018-08-20 17:03:06 · 192 阅读 · 0 评论 -
拔河比赛
描述 Description 一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近。输入格式 Input Format输入数据的第1行是一个n,表示参加拔河比赛的总人数,n<=100,接下来的n行表示第1到第n个人的体重,每个人的体重都是整数(1<=weight<=450)。...原创 2018-06-13 15:24:22 · 2848 阅读 · 0 评论 -
noip2017宝藏
这道题是一个状压,汤神说爆搜写就行,我这个小蒟蒻只会写递推DP,还莫名WA掉一组。后来想了一下,因为这道题加路径的时候,是加上L*K的,L是边权,K是从起点到当前的点经过的点的数量。如果有一种情况,由上一个状态到达了当前的这个状态,求出的值和当前的ans相等的话,那么递推的时候就没法儿更新(按照我这个彩笔的写法),但是当前这个状态的每个点的K值和之前最优值的不一定一样。那么这时候不好判断最优值。所...原创 2018-06-28 21:19:32 · 537 阅读 · 0 评论 -
[九省联考2018]一双木棋
先分析状态。画几张图你发现,一个合法的状态,它从第一行到第nnn行,每一行上棋子的数量一定是单调不增的,并且棋子一定是从左到右紧密排列。写个dfsdfsdfs爆搜一下合法状态,最多也就181818万左右。因此可以状压爆搜。两人都想最优,这种情况一般维护一个差值。即我们维护一个maxmaxmax菲菲−-−maxmaxmax牛牛。为了两人在求解最值的过程中能互相限制,保证双方都是最优情况,我们...原创 2019-03-27 18:54:34 · 279 阅读 · 0 评论