===DP及优化===
Loi_a
这个作者很懒,什么都没留下…
展开
-
玩具装箱BZOJ1010 斜率优化
#include<cstdio>#include<iostream>#include<queue>#define LL long longusing namespace std;LL dp[50005];LL t[50005],C;LL f(LL x){ return t[x]+x; }LL p(LL x){ return x*x; }double get(int j,i原创 2016-07-25 22:00:38 · 405 阅读 · 0 评论 -
noip2016 换教室 期望+DP
考场一看见期望就怂了,于是去做第二题,做了两个多小时,没做出来。GG。 dp[ i ][ j ][0/1]表示前 i 节课申请 j 次的最小期望。然后[0]表示这次没申请,[1]表示已申请。 所以dp[i-1][j][1] 有f[i-1]的概率停在 d[i-1] 点,有(1 - f[i-1])概率停在c[i-1]点。 dp[i][j][0]=min dp[i-1][j][1] +dis[ d原创 2016-12-20 15:21:00 · 653 阅读 · 0 评论 -
洛谷1217 有线电视网 树上dp
状态非常好想,dp[i][j]表示以i为根的子树选j个叶子所能产生的最大价值。 方程不太好写,for(int k=sz[x];k;k--)for(int j=1;j<=sz[v];j++) dp[x][k]=max(dp[x][k],dp[x][k-j]+dp[v][j]-b[i].d);然后放在树上……#include<iostream>#include<cstdio>#defin原创 2016-11-02 21:17:28 · 610 阅读 · 0 评论 -
noip2003 加分二叉树 dp
中序遍历中,一个节点子树是该点向左右扩展连续的一段。dp[x][l][r]是记录以x为根,l,r为左右端点的子树所产生的最大价值。记忆化搜索做。#include<bits/stdc++.h>#define LL long longusing namespace std;LL dp[35][35][35];LL a[35];int ch[35][35][35][2];LL dfs(int原创 2016-11-02 14:24:54 · 617 阅读 · 0 评论 -
noip2015 子串 dp
dp[i][j][k]表示A串匹配到第 i 位,B串匹配到第 j 位,分了k组的总方案数。后面再加0/1维表示第i位选或不选。 朴素DP会MLE,所以把第一维滚动起来。 dp[i][j][l][1] = dp[i-1][j-1][l-1][1] + dp[i-1][j-1][l-1][0] + dp[i-1][j-1][l][1]; dp[i][j][l][0] = dp[i-1][j][l]原创 2016-11-13 15:45:14 · 512 阅读 · 0 评论 -
noip2014 飞扬的小鸟 DP
这道题向上是完全背包 dp[i][j+cx[i-1]] = min( dp[i][j]+1 , dp[i][j+cx[i-1]] ). 向下是01背包 dp[i][j] = min ( dp[i][j] , dp[i-1][j+cy[i-1]] ).注意先向上转移。 然后用管子覆盖掉。 然后向后递推点一下的情况dp[i+1][j+cx[i]] = dp[i][j]+1; 时间复杂度n*m;#原创 2016-11-13 08:35:25 · 493 阅读 · 0 评论 -
洛谷1156 垃圾陷阱 dp
https://www.luogu.org/problem/show?pid=1156 这个题状态有很多种表示方法: 1. f[i]表示堆到i的高度时最大生命值是多少。 堆 f[i+a[j]]=max( f[ i+a[j] ] , f[i] ) ; 吃 f[i]=f[i]+b[j]; 2. bool f[ i ][ j ]表示能否到达 i 高度, j 血量。 然后时间复杂度原创 2016-11-03 09:38:32 · 535 阅读 · 0 评论 -
bzoj 1003 物流运输 DP+Spfa
一看到题目,吓了一跳,看到数据范围…… spfa(j,i)表示第j天到第i天可用点的最短路。 spfa(i,j) if(j!=0)dp[i]=min(dp[i],dp[j]+(i-j)*dis[m]+k); else dp[i]=min(dp[i],dp[j]+(i-j)*dis[m]);#include<cstdio>#include<iostrea原创 2016-09-26 17:05:17 · 585 阅读 · 0 评论 -
Windy数BZOJ 数位DP
#include<iostream>#include<cstdio>#include<cstring>int qqq(int x){ return x>=0?x:-x;}using namespace std;int dp[15][10][2];char a[15],b[15];int main(){ scanf("%s%s",a+1,b+1); int原创 2016-07-25 22:07:09 · 380 阅读 · 0 评论 -
bzoj1911 特别行动队 斜率优化
斜率优化最裸的裸题,但是式子推了好久,忘了形式。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define LL long longusing namespace std;LL dp[1000005];LL s[1000005];LL a,b,c;LL p(LL x){ retur原创 2016-09-21 21:16:19 · 384 阅读 · 0 评论 -
bzoj 4518 征途 斜率优化
我想写题解,可我语文不好。#include<cstdio>#include<cstring>#include<iostream>using namespace std;int sum[3002],f[3002][3002];int n,m,head,tail,a;int q[3002];double get(int i,int x,int y){ return ((doubl原创 2016-09-02 21:17:36 · 313 阅读 · 0 评论 -
Cats Transport Codeforces 311B 斜率优化
题意是(我语文不好) n只小猫在不同的时间去爬m座山,下不来了,需要p个饲养员去帮它们。 n,m<=100,000;p<=100; 山在一条线上,给出他们之间的距离,以及每只猫在山上的时间。 饲养员从1号山出发,速度为1,可以在任意时间出发。 只能猫等人,人不会等猫; 求所有猫最小的等待时间之和。 Input The first line of the input contai原创 2016-07-25 22:23:20 · 740 阅读 · 0 评论 -
bzoj4033 HAOI2015 T1 树形DP
dp[i][j]表示以i点为根的子树中选j个黑点,所能达到的最大价值。#include<cstdio>#include<cstring>#include<iostream>#define maxn 2005#define LL long longusing namespace std;struct E{ int to,nxt,d;}b[maxn<<1];int fst[max原创 2017-03-20 14:26:21 · 369 阅读 · 0 评论