
DP
hannibal_lecter_
这个作者很懒,什么都没留下…
展开
-
【HDU3555】数位DP模板题
#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;#define lowbit(x) ((x)&(-x))typedef long long ll;const int maxn = 1e5+5;const int mod = 1e9+9;int Case = 1;ll dp[20]...原创 2019-01-26 21:41:39 · 117 阅读 · 0 评论 -
poj3585【树形dp二次换根】
这道题如果用暴力的方法是枚举根节点,对每个根节点dfs下去,但是这样肯定会T,需要用树形dp优化一下。辅助数组:d[maxn], f[manx];d[i]:代表以任意某个节点为根,i可以向其子节点流的最大流量。f[i]:代表以i为根节点时,最大流量。当我们以1为根节点时,明显f[1] = d[1];处理d【i】数组:一遍dfs就行。关键在于如何求f【i】?我们可以知道f[i] = d...原创 2019-02-28 11:02:27 · 419 阅读 · 0 评论 -
[Wc2008]游览计划【斯坦纳树】
斯坦纳树的问题模型是:有一个图,要求保留图中最少的边/最小的边权和使得某k个点相互连通。最小生成树是斯坦纳树的一种特殊情况。我们用f[i]][j][s]表示方格中i,j位置与各个景点之间的联通情况。如果景点数为3时,111表示全部联通, 101表示第二个景点没有联通。。。当然第x个景点的 f[i][j][(1<<x)] = 0,其他的情况先初始化为inf。状态怎么转移?有两种...原创 2019-02-28 21:42:27 · 247 阅读 · 0 评论 -
UVA - 11825【状压DP】
题意很容易懂,注意一点相邻不代表联通。首先要知道有两种状态 1,第i台计算机影响的所有计算机的状态。(p[18]) 2,攻击哪些状态的计算机可以使服务瘫痪。(c[1<<18])使dp[s]代表使状态为s的计算机最大数量的服务瘫痪。(dp[1<<18])状态转移方程就是 dp[s] = max(dp[s], dp[s^s0]+1)(s0是s的子集)问题就可以解决...原创 2019-03-01 21:14:43 · 111 阅读 · 0 评论 -
HDU-2457 DNA repair【AC自动机+DP】
第一次。。自己分析出来的dp。。。。。和之前做过的题很像,感觉有关构造字符串的题都有套路。dp中一定包含一维trie图中的节点状态(好像是废话)这道题我们用dp[i][j]表示长度为i节点状态为j最少消去的数量。状态转移就是dp[i][u] = min(dp[i][u], dp[i-1][j]+(ch!=ss[i]));#include<bits/stdc++.h>usin...原创 2019-04-10 22:51:14 · 209 阅读 · 0 评论 -
HDU-2243考研路茫茫——单词情结【AC自动机+矩阵快速幂】
看到L那么大就应该想到矩阵快速幂。而且这道题和之前的POJ 2778. DNA Sequence很想。我们只需要计算一下长度小于等于n的不包含特殊串的个数(矩阵中要增加一维代表每一行的sum),然后用总的可能数减去不包含的就是答案了(总的可能数很多人都是用矩阵写的,其实用等比数列求和公式就行了啊)。#include<bits/stdc++.h>using namespace s...原创 2019-04-11 08:09:17 · 228 阅读 · 2 评论 -
ZOJ - 3494【AC自动机+数位DP】
数据那么大肯定是数位DP呀。DP状态很好分析出来,注意数位DP上判一下前导零的情况就行。#include<bits/stdc++.h>using namespace std;const int maxn = 2005;typedef long long ll;char ss[maxn];int bit[maxn];ll dp[205][maxn];const ll m...原创 2019-04-11 14:30:26 · 148 阅读 · 0 评论 -
Clannad 18四川省赛【AC自动机+DP】
题目链接第一次遇到卡last优化的题。因为要不断跳fail链上的ed节点,不用last优化的话会T。因为fail指针指向的是当前节点的最长后缀,所以用dp[i]表示前i个字符能分解的数量,转移方程就为dp[i] += dp[i-size[u]] (u是fail链上的所有节点)所以要last优化。。。#include<bits/stdc++.h>using namespac...原创 2019-04-09 09:10:27 · 260 阅读 · 0 评论 -
【ac自动机】【DP】
fold爷出的题,突然想起来了存个板子。。对串S讨论一下DP就行了dp[i][u]=max(dp[i−1][j]+val[u],dp[i][u])dp[i][u] = max(dp[i-1][j]+val[u], dp[i][u]) dp[i][u]=max(dp[i−1][j]+val[u],dp[i][u])注意建fail指针的时候要val[u] += val[fail[u]],一个t串...原创 2019-07-31 11:05:55 · 186 阅读 · 0 评论 -
zoj3201【树形dp+背包】
#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 105;int Case = 1, n, m;int dp[maxn][maxn], cnt[maxn], w[maxn], res;vector<int>...原创 2019-02-27 21:44:01 · 144 阅读 · 0 评论 -
P1896 [SCOI2005]【状压dp】
#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+5;int Case = 1;int n, m;ll y[1<<10], dp[10][1<<10][100], mp[10], nu...原创 2019-02-27 21:39:20 · 92 阅读 · 0 评论 -
环形区间连续和问题[长度不超过n的连续最大和]
#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5+5;int Case = 1;ll cc[maxn], pre[maxn];void solve() { int n, m; scanf("%...原创 2019-02-02 23:42:00 · 229 阅读 · 0 评论 -
树形dp模板poj1463
poj1463#pragma GCC optimize(2)#include&lt;vector&gt;#include&lt;cstdio&gt;using namespace std;typedef long long ll;const int maxn = 1500+5;int Case = 1, dp[maxn][2], n;vector&lt;int&gt;ve[maxn...原创 2019-02-27 21:22:15 · 272 阅读 · 0 评论 -
poj2378树形dp
#pragma GCC optimize(2)#include&lt;vector&gt;#include&lt;cstdio&gt;#include&lt;algorithm&gt;using namespace std;typedef long long ll;const int maxn = 1e4+5;int Case = 1, n;vector&lt;int&am原创 2019-02-27 21:24:01 · 161 阅读 · 0 评论 -
poj2411【状压dp】
#pragma GCC optimize(2)#include<cstdio>#include<cstring>using namespace std;typedef long long ll;const int maxn = 1e5+5;int n, m, yy[1<<12];ll dp[12][1<<12];void init()...原创 2019-02-27 21:25:34 · 147 阅读 · 0 评论 -
hdu3652【数位dp】【取模】
#pragma GCC optimize(2)#include&lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;int Case = 1;ll n, dp[25][15][3];int pos[15];ll dfs(int p, int mod, int status, bool up) { if(!p...原创 2019-02-27 21:28:20 · 171 阅读 · 0 评论 -
hdu3709平衡数【数位dp】
#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;int Case = 1, t[100];ll n, m, f[20][20][2005];ll dfs(int pos,int o,int val,int lim) { if (pos==0)...原创 2019-02-27 21:32:37 · 170 阅读 · 0 评论 -
P2622 关灯问题II【状压dp】
#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+5;int Case = 1;struct node{ int s, num;};int a[105][1050], vis[1000005];i...原创 2019-02-27 21:36:08 · 150 阅读 · 0 评论 -
P1879 [USACO06NOV]状压dp
#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+5;const int mod = 100000000;int n, m, cc[20][20], st[1<<13], mp[13], dp[13...原创 2019-02-27 21:38:03 · 129 阅读 · 0 评论 -
洛谷P2503 [HAOI2006]【模拟退火】
题目链接读题意读了一年。。题意是将n个数分成m组,将每个组的求一个sum。计算m个sum的方差。求最小的方差。思路:先考虑连续选m个分组求最小方差,很容易想到DP。dp[i][j]表示前i个数分成j组最小的花费。状态转移就是dp[i][j]=min(dp[i][j],dp[k][j−1]+(pre[i]−pre[k]−sum/n))(k<i,j<=m) d...原创 2019-08-04 17:45:26 · 160 阅读 · 0 评论