动态规划
文章平均质量分 75
pizzaaaaa
这个作者很懒,什么都没留下…
展开
-
codeforces div2 round#230 D
算是经典模型和比较简单的一道dp吧,比赛完之后看到题目我这种dp渣都有点感动。我们用dp[i][j][k]来表示将i个盘子从j号柱子移到k号柱子的最小花费,那么最终我们所求的就是dp[n][1][3]。状态转移方程也比较好想,dp[n][a][c]=min(dp[n-1][a][b]+cost[a][c]+dp[n-1][b][c],dp[n-1][a][c]+cost[a][b]+dp[原创 2014-02-22 09:41:08 · 477 阅读 · 0 评论 -
Codeforces 441 E. Valera and Number
/* Codeforces 441 E. Valera and Number 题意:给定三个整数,x,k,p.进行k轮操作,每轮有p%的可能性将x乘上2,有(100-p)%的可能性把x加上1,问最后x的二进制表示中末尾有多少个零的期望. 解法:dp解决,dp[k][i][j]表示进行k轮后,后八位是j并且后八位之前连续的1或者0的长度.(之所以定义为八位是因为考虑到加法操作再怎么影响,也只有原创 2014-08-04 00:54:09 · 488 阅读 · 0 评论 -
403 D. Beautiful Pairs of Numbers
/* 题意:给定n和k,问满足1<=a1<=b1<a2<=b2<a3<=b3<...<ak<=bk<=n,并且b1-a1,b2-a2,b3-a3...bk-ak互不相同的组数. 假设x1=b1-a1,x2=b2-a2,x3=b3-a3,...,xk=bk-ak 则可以得到a1+x1+...+xk+k-1<=n,我们要求它的非负整数解 也就是要求x1+x2+...+xk<=n-a1+1的正整原创 2014-08-04 00:53:43 · 465 阅读 · 0 评论 -
HDU 2829 Lawrence
#include #include #define maxn 1005#define LL long longLL a[maxn];LL s1[maxn];LL s2[maxn];LL dp[maxn][maxn];int Q[maxn];int head,tail;LL get0(int p,int j){ return dp[p][j]-s2[p]+s1[p原创 2014-05-27 16:37:22 · 384 阅读 · 0 评论 -
HDU 3507 Print Article
#include #include #define maxn 500005#define inf 0xffffffint dp[maxn];int Q[maxn];int sum[maxn];int get1(int i){ return dp[i]+sum[i]*sum[i];}int get2(int i,int j){ return sum[i]原创 2014-05-27 16:37:08 · 291 阅读 · 0 评论 -
HDU 3401 Trade
#include #include #include using namespace std;#define maxn 2005#define inf (1<<20)int dp[maxn][maxn];int ap[maxn],bp[maxn],as[maxn],bs[maxn];int Q[maxn];int head,tail;int main(){原创 2014-05-26 18:34:38 · 363 阅读 · 0 评论 -
POJ 3709 K-Anonymous Sequence
#include #include #define maxn 5000005#define LL long longLL a[maxn];LL sum[maxn];LL dp[maxn];int Q[maxn];int head,tail;LL get0(int p){ return dp[p]-sum[p]+p*a[p+1];}LL get1(int p原创 2014-05-27 16:37:36 · 442 阅读 · 0 评论 -
POJ 3017 Cut the Sequence
#include "cstdio"#include #include using namespace std;#define LL long long #define maxn 100005LL a[maxn];int Q[maxn];LL dp[maxn];int main(){ int n; LL m; while(scanf("%d%lld",&原创 2014-05-27 16:36:30 · 387 阅读 · 0 评论 -
HDU 4809 Cirno’s Present
非常值得一做的树形dp.题意:给定一棵树(n<=300),你可以给每个节点等概率地染成A,B,C三种颜色之一,对于树上的一条边,若其两个端点的颜色不一样,则断开这条边.最后对于一个特定的颜色,X为点数为奇数的联通块个数,Y是点数为偶数的联通块个数,其得分为max(0,X-Y).问最后得分的期望乘上3^n mod 1e9+7的值.解法:注意到颜色的对称性,我们只需要求出每个颜色的期望再乘上3原创 2014-11-03 08:20:06 · 1034 阅读 · 0 评论 -
480 C. Riding in a Lift
蛮简单的dp.原创 2014-11-03 08:24:00 · 418 阅读 · 0 评论 -
477 D. Dreamoon and Binary
好久不写CSDN了,原创 2014-11-02 22:14:17 · 690 阅读 · 0 评论 -
482 D. Random Function and Tree
题意:给定一棵树,初始状态下所有树的节点都是红色,现在按照下述程序递归对树进行染色,问所有染色的方法数.染色方法:int p(){}//等可能地返回0和1int count;//全局变量,初始值为0.void paint(s){ int v = p(); if(v == 0) 将点s染为白色. else 将点s染为黑色. v = p(); if(v ==原创 2014-11-02 22:20:39 · 566 阅读 · 0 评论 -
482 C. Game with Strings
题意:给定n个长度为m的串(n<=50,m<=20),保证每个串互不相同.每次可以问目标串一个位置上的字母,问最终猜出目标串的期望次数.解法:状态压缩dp.Let dp[mask] be the expected number of questions from state mask. When we try to ask question pos in state mask, the c原创 2014-11-02 22:22:10 · 532 阅读 · 0 评论 -
477 C. Dreamoon and Strings
题意:给定字符串s,t.问s串删除k个字符后,最多有多少个互不相交的子序列和p相等.解法:dp[i][j]:字符s[i]之前删除了j个字符后的答案.对于s[i]的每一位设置一个转移位点to[i],表示以s[i]开始的串匹配t的最后一个位置加上1.dp转移方程:dp[i+1][j]=max(dp[i+1][j],dp[i][j])//这一步主要是为了那些不在to[]中的位点更新值.原创 2014-11-02 22:16:01 · 853 阅读 · 0 评论 -
Codeforces Round #263 (Div. 1)
56.Codeforces 461 A. Appleman and Toastman:简单的贪心.57.Codeforces 461 B. Appleman and Tree题意:给定一棵包含n个节点的树,这棵树的一些节点(至少一个)被染成黑色,现在可以删除一些边,使得删完边后的每个联通分量中恰好只有一个黑色节点.问满足条件的方案数一共有多少(对1e9+7取mod).解法:树形原创 2014-11-05 11:05:02 · 534 阅读 · 0 评论 -
Codeforces 149D Coloring Brackets
#include #include #define LL long longconst int mod = 1e9 + 7;#define maxn 777LL dp[maxn][maxn][3][3];int match[maxn];int stack[maxn];char str[maxn];int len;void make_match(){ int top原创 2014-05-27 16:35:51 · 434 阅读 · 0 评论 -
HDU 4832 Chess
/* dp预处理再加组合数 题意:在n*m的格子上有一个棋子,它的移动规则(设初始点为(x,y)):可以移到(x+1,y),(x+2,y),(x-1,y),(x-2,y),(x,y+1),(x,y+2),(x,y-1),(x,y-2) 解法:n^2 dp预处理,再组合数求解. 先dp预处理出横向和纵向走i步的总的方法数,则最后答案为sigma(C(k,i)*e[i]*f[i]) 注原创 2014-07-21 20:04:56 · 400 阅读 · 0 评论 -
2014校赛 猫和老鼠
题目描述 Tom 和 Jerry 的故事又开始了。一天Jerry在偷得k块奶酪之后要返回自己的家中。现已知Jerry目前的位置在数轴上的坐标为0,Jerry的家在数轴上的坐标为n,Jerry每次只能从i处走到i+1处。初始时刻Jerry在每一点处都有的概率被Tom发现,而在数轴上坐标为i的地方,Jerry可以选择吃掉一块奶酪来提升自己的行动能力。由于距离的原因,Jerry在坐标为i原创 2014-05-15 21:51:51 · 878 阅读 · 0 评论 -
HDU 3415 Max Sum of Max-K-sub-sequence
比较经典的单调队列题目。我们考虑每一个区间的末尾duan dian原创 2014-05-20 17:19:42 · 405 阅读 · 0 评论 -
HDU 4193 Non-negative Partial Sums
也是单调队列维护前缀和的问题。原创 2014-05-20 17:59:55 · 400 阅读 · 0 评论 -
HDU 2476 String painter
#include #include #include using namespace std;#define maxn 110int dp[maxn][maxn];int g[maxn];int main(){ char s[maxn],t[maxn]; while(scanf("%s%s",s,t)!=EOF) { int len=(i原创 2014-06-04 21:15:20 · 514 阅读 · 0 评论 -
POJ 1651 Multiplication Puzzle
#include #include #include using namespace std;#define maxn 111#define inf 100000005int dp[maxn][maxn];int v[maxn];int main(){ int n; while(scanf("%d",&n)!=EOF) { memset原创 2014-06-04 21:12:53 · 368 阅读 · 0 评论 -
ZJU 3469 Food Delivery
#include #include #include using namespace std;const int maxn = 1010;const int inf = 1e8;int dp[maxn][maxn][2];int sum[maxn];struct node{ int x,v;}a[maxn];bool cmp(const node &p,const原创 2014-06-04 21:13:52 · 398 阅读 · 0 评论 -
POJ 2955 Brackets
#include #include #include using namespace std;#define maxn 110int dp[maxn][maxn];int main(){ char str[maxn]; while(scanf("%s",str)!=EOF) { if(str[0]=='e') break;原创 2014-06-04 21:11:50 · 345 阅读 · 0 评论 -
HDU 4283 You Are the One
#include #include #include using namespace std;const int maxn = 111;const int inf = 1e8;int dp[maxn][maxn];int d[maxn];int sum[maxn];int n;int main(){ int T; scanf("%d",&T);原创 2014-06-04 21:09:07 · 387 阅读 · 0 评论 -
Acdream 1083 人民城管爱人民
#include #include #include using namespace std;#define inf 10000000 struct edge{ int to; int cost;}; const int maxn = 1e4; vector g[maxn];bool vis[maxn];int dp[maxn][2];int n,m;原创 2014-06-04 21:20:56 · 970 阅读 · 0 评论 -
ZJU 3537 Cake
#include #include #include using namespace std;struct point{ int x,y;};#define maxn 333const int inf = 1e8;point t[maxn];point a[maxn];int dp[maxn][maxn];int P;int calc1(int x){ ret原创 2014-06-04 21:10:17 · 398 阅读 · 0 评论 -
HDU 4035 Maze
#include #include #include #include using namespace std;const int maxn = 10000 + 5;#define eps 1e-10int n;double k[maxn],e[maxn];double a[maxn],b[maxn],c[maxn];vector v[maxn];bool dfs(i原创 2014-05-26 18:33:17 · 369 阅读 · 0 评论 -
POJ 2096 Collecting Bugs
#include "cstdio"#include "cstring"double d[1005][1005];int n,s;double tn,ts;double solve(int p,int q){ if(d[p][q]!=-1) return d[p][q]; if(p==n&&q==s) return d[p][q]=0; if(p==n&&原创 2014-05-26 18:29:57 · 364 阅读 · 0 评论 -
HDU 4405 Aeroplane chess
#include "cstdio"#include "cstring"double d[100011];int n,m;int trans[100011];/*double solve(int pos){ if(d[pos]<0) return d[pos]; if(pos>=n) return d[pos]=0; if(trans[pos]!=-1)原创 2014-05-26 18:32:18 · 375 阅读 · 0 评论 -
ZOJ 3329 One Person Game
#include "cstdio"#include double p[20];double ta[550],tb[550];int main(){ int t; scanf("%d",&t); int k1,k2,k3; int n; int a,b,c; while(t--) { memset(p,0,sizeo原创 2014-05-26 18:31:08 · 396 阅读 · 0 评论 -
HDU 4804 Campus Design
轮廓线动态规划.状态比较好想,注意转移状态以及位运算.状态转移方式见代码.#include #include const int MOD = 1000000007;inline void add(int &x, int y){ x += y; while (x >= MOD) x -= MOD;}int dp[2][1 << 10][25];int原创 2014-11-02 22:27:56 · 388 阅读 · 0 评论