dp
sepNINE
it is written
展开
-
poj1485 Fast Food 动态规划
//poj 1485//fenix_bao#include <iostream>using namespace std;const int MAXN=256,MAXK=32;int pos[MAXN],dp[MAXN][MAXK],dis[MAXN][MAXN],one_cover[MAXN][MAXN];int sum_dis[MAXN][MAXN],sum_dis_r...原创 2018-03-21 20:04:52 · 436 阅读 · 0 评论 -
poj 1015 Jury Compromise 01背包+输出方案
//poj 1015//sep9#includeusing namespace std;const int delta=400;int a[202],b[202];int dp[202][22][2*delta+10];int path[202][22][2*delta+10];int n,m;void print(int x,int y,int z){ if(x==0)原创 2015-10-15 14:58:33 · 426 阅读 · 0 评论 -
poj 2677 dp解双调tsp
//poj 2677//sep9#include #include using namespace std;const int maxN=128;struct P{ double x,y;}p[maxN];int n;double dp[maxN][maxN],dis[maxN][maxN];double solve(){ dp[1][2]=dis[1][2]; fo原创 2015-10-26 15:18:53 · 528 阅读 · 0 评论 -
poj 2625 概率dp
//poj 2625//sep9#include using namespace std;typedef __int64 INT;INT n,up,down;INT gcd(INT x,INT y){ return x%y==0?y:gcd(y,x%y);}void add(INT x,INT y){ if(down==0){ up=x; down=y; re原创 2015-10-26 11:04:17 · 658 阅读 · 0 评论 -
poj 2564 Edit Step Ladders TRIE树+dp求图中最长路
//poj 2564//sep9#include using namespace std;const int MAXN=25000;int n,idx;char tmp[20],s[MAXN+10][20];int dp[MAXN+10];struct TRIE{ int c[27]; bool vis; int ids;}a[8*MAXN+10];void inse原创 2015-10-10 18:22:45 · 547 阅读 · 0 评论 -
poj 1784 Huffman's Greed 动态规划四边形加速求最优二叉搜索树
题意:给二叉搜索树的内部节点p1,p2...pn和外部节点q0,q1,..qn,求一棵比较数期望最小的二叉搜索树,输出期望。分析:n^3的动态规划很容易想到,方程满足四边形优化的条件,可优化的n^2.代码(n^3)://poj 1784//sep9#include using namespace std;const int maxN=256;int dp[maxN][原创 2015-09-20 06:12:49 · 1585 阅读 · 0 评论 -
poj 2250 Compromise dp求lcs+输出方案
//poj 2250//sep9#include using namespace std;struct WORD{ char s[32];}a[128],b[128];int dp[128][128],match[128][128];void print(int x,int y){ if(x==0||y==0) return ; if(match[x][y]==0){原创 2015-10-08 17:22:07 · 535 阅读 · 0 评论 -
poj 2288 Islands and Bridges 状压dp
//poj 2288//sep9#include using namespace std;typedef __int64 INT;INT v[16];INT dp[(1<<13)+10][13][13],path[(1<<13)+10][13][13];bool map[16][16];int n,m;INT rec(int s,int now,int pre){ if(d原创 2015-10-08 15:21:00 · 399 阅读 · 0 评论 -
poj 2353 Ministry 对规划方向有要求的dp
//poj 2353//sep9#includeusing namespace std;int dp[128][512],cost[128][512],path[128][512];int m,n;void print(int row,int col){ if(path[row][col]==col) print(row-1,col); else if(path[row][c原创 2015-10-08 00:27:02 · 622 阅读 · 0 评论 -
poj 3181 Dollar Dayz 高精度+完全背包
//poj 3181//sep9#include using namespace std;struct H { int a[10],len; void clear(){ memset(a,0,sizeof(a));len=1; } void print(){ printf("%d",a[len]原创 2015-10-06 23:09:47 · 448 阅读 · 0 评论 -
poj 1185 炮兵阵地 状态压缩dp
题意:良心中文题不赘述了。分析:状态压缩dp,每行的状态和前两行有关。代码://poj 1185//sep9#include using namespace std;int n,m;char g[128][16];int row_state[128][128];int dp[128][64][64];bool check(int row,int st){ f原创 2015-09-17 14:16:22 · 553 阅读 · 0 评论 -
poj 2404 Jogging Trails 状压dp
?/poj 2404//sep9#include using namespace std;const int MAX=INT_MAX/2;const int MAXN=16;int n,m;int deg[MAXN],d[MAXN][MAXN],dp[1<<MAXN];int rec(int s){ if(s==0) return dp[s]=0; if(dp[s]>原创 2015-10-10 00:19:44 · 615 阅读 · 0 评论 -
poj 3272 Cow Traffic dag上的dp
//poj 3272//sep9#include using namespace std;const int MAXN=5012;const int MAXM=50012;int n,m,e,rev_e;int head[MAXN],rev_head[MAXN],flag[MAXN],dp[MAXN],rev_dp[MAXN];struct EDGE{ int v,next;}原创 2015-10-20 20:37:14 · 493 阅读 · 0 评论 -
poj 1192 最优连通子集 树的孩子兄弟表示法+简单树型dp
题意:poj的良心中文题,不赘述了。分析:难点是想到能把题中的最优单连通子集问题转化为求树的最大权子树问题,之后我用的是孩子兄弟表示,当然在建树的时候直接dp也行。树的最大权子树感觉是最简单的树型dp了。代码://poj 1192//sep9#include #include #include using namespace std;const int maxN=1原创 2015-09-14 10:35:59 · 956 阅读 · 0 评论 -
poj 1170 Shopping Offers 完全背包
题意:给在商店里要买的商品的种类,数量,价格,和一些组合购买选项(如同时买2个a,1个b,只要x元),求最小花费。分析:因为要买的商品种类数b是变量(b代码://poj 1170//sep9#include using namespace std;int b,c,k,p,s;int dp[8][8][8][8][8];int tot_idx[8];int idx[原创 2015-09-29 16:42:17 · 457 阅读 · 0 评论 -
poj 1404 I-Keyboard dp输出方案
//poj 1404//sep9#includeusing namespace std;int k,l;int frequency[128];int cost[128][128],price[128][128],idx[128][128];char keys[128],letters[128];void ini(){ memset(price,0x40,sizeof(pric原创 2015-09-27 23:13:36 · 716 阅读 · 0 评论 -
poj 3280 Cheapest Palindrome 区间dp
题意:给添加和删除每个字符的代价,求将一个字符串变成回文串的最小代价。分析:区间dp,采用了备忘录方法。代码://poj 3280//sep9#includeusing namespace std;const int maxN=2048;int n,m;int dp[maxN][maxN];char s[maxN];int add_cost[256],del_c原创 2015-09-27 14:45:32 · 445 阅读 · 0 评论 -
poj 3790 Recursively Palindromic Partitions dp水题
//poj 3790//sep9#includeusing namespace std;int dp[1024];int rec(int n){ if(n==0) return 1; if(dp[n]!=-1) return dp[n]; int sum=0; if(n%2){ for(int i=1;i<=n;i+=2) sum+=rec((n-i)/2);原创 2015-11-17 15:25:15 · 763 阅读 · 2 评论 -
poj 3797 Tiling a Grid With Dominoes 状压dp
//poj 3797//sep9#include using namespace std;int dp[2][128];int n,m;int solve(){ if(m>n) swap(m,n); memset(dp,0,sizeof(dp)); int *crt=dp[0],*nxt=dp[1]; crt[0]=1; for(int i=n-1;i>=0;--i)原创 2015-11-18 16:28:14 · 568 阅读 · 0 评论 -
poj 1848 Tree 树形dp
//poj 1848//sep9include #include using namespace std;const int MAXN=128;const int INF=100000;vector g[2*MAXN];int dp[MAXN][3];void dfs(int u,int p){ vector son; int sum=0; for(int i=0;i<原创 2015-12-11 10:42:59 · 526 阅读 · 0 评论 -
poj 1180 Batch Scheduling dp斜率优化
题意: 设dp[i]=min dp[j]+(S+sumT[i]-sumT[j])*F[i] 1分析: dp[i]=min (S+sumT[i])*sumF[i]+dp[j]-sumT[j]*F[i],由于F[i]随i减小单增,sumT[j]随i减小单增,按照i从N到1倒推dp[i]满足单调队列优化的条件dp[i]=S(i)+min{fj(i)|i代码:原创 2017-08-23 20:18:19 · 406 阅读 · 0 评论 -
poj 1322 Chocolate 概率dp
//poj 1322 AC//sep9#include using namespace std;int c,n,m;double dp[2][128];int main(){ while(scanf("%d",&c)==1&&c){ scanf("%d%d",&n,&m); if(m>c||m>n||(m+n)%2){ puts("0.000"); conti原创 2016-09-20 09:58:11 · 453 阅读 · 0 评论 -
poj 1505 Copying Books 动态规划
//poj 1505//sep9#include using namespace std;const int MAXN=512;int sum[MAXN],path[MAXN],dp[MAXN][MAXN];int main(){ int cases; scanf("%d",&cases); while(cases--){ int m,k; scanf("%d%d",原创 2016-06-04 14:29:29 · 1024 阅读 · 1 评论 -
poj 1189 钉子和小球 概率dp转化为计数dp
//poj 1189//sep9#include using namespace std;typedef long long ll;int n,m;char g[64][64];ll dp[64][64];ll gcd(ll a,ll b){ return a%b==0?b:gcd(b,a%b);}void print(ll a,ll b){ ll d=gcd(a,b原创 2016-05-06 09:56:08 · 545 阅读 · 0 评论 -
poj 2151 Check the difficulty of problems 概率dp
//poj 2151//sep9#include using namespace std;int n,m,t;double p[1024][35],dp[1024][35][35],s[1024][35];int main(){ while(scanf("%d%d%d",&m,&t,&n)==3){ if(!(n+m+t)) break; for(int i=1;i<=t;原创 2016-05-16 22:43:15 · 483 阅读 · 0 评论 -
poj 1661 Help Jimmy 动态规划
题意:给n个用左端点、右端点。高度标志的平台,问一个下落速度,移动速度均为1的点下落到地面的最小时间,其中每次下落距离不能超过输入值MAX.分析:动态规划ldp[i]表示从第i块木板左边下落到地面的最小时间,rdp[i]表示从第i块木板右边下落到地面的最小时间。代码://poj 1661//sep9#include #include #include using na原创 2016-04-19 22:51:52 · 704 阅读 · 0 评论 -
poj 1036 Gangsters 简单dp
//poj 1036//sep9//这种dp效率低 会爆内存#include using namespace std;const int MAXT=30012;const int MAXS=112;const int MAXN=112;int n,k,t;int a[MAXT][MAXS];int dp[MAXT][MAXS];int x[MAXN],y[MAXN],z[MA原创 2016-04-18 14:54:49 · 446 阅读 · 0 评论 -
poj 1038 Bugs Integrated, Inc. 状态压缩dp
//poj 1038#include using namespace std;int n,m,k,x,y,ans,o;int map[180][16],f[2][60000],three[16],p[16],q[16];void init(){ three[0]=1; for(int i=1;i<=11;++i) three[i]=three[i-1]*3; }int原创 2016-04-27 15:08:24 · 400 阅读 · 0 评论 -
poj 1037 A decorative fence dp+序列构造
//poj 1037//sep9#include using namespace std;typedef long long ll;ll dp[32][32][2];bool vis[32];int main(){ memset(dp,0,sizeof(dp)); dp[1][1][0]=dp[1][1][1]=1; for(int len=2;len<=20;++len)原创 2016-04-26 17:53:04 · 795 阅读 · 0 评论 -
poj 3356 AGTC 简单dp
//poj 3356//sep9#include using namespace std;const int MAXN=1024;char a[MAXN],b[MAXN];int dp[MAXN][MAXN];int main(){ int lenA,lenB; while(scanf("%d%s%d%s",&lenA,&a[1],&lenB,&b[1])!=EOF){原创 2016-04-13 16:42:02 · 407 阅读 · 0 评论 -
poj 1082 Calendar Game 博弈论dp
//poj 1082//sep9#include using namespace std;int dp[200][14][33];int month_day(int y,int m){ if(y%4==0&&y%100!=0||y%400==0) if(m==2) return 29; if(m==1||m==3||m==5||m==7||m==8||m==10||m=原创 2016-04-25 18:00:23 · 672 阅读 · 0 评论 -
poj 1252 Euro Efficiency 正负完全背包
//poj 1252//sep9#include using namespace std;const int MAXV=1200;int val[8];int dp[MAXV+10];int main(){ int cases; scanf("%d",&cases); while(cases--){ for(int i=0;i<6;++i) scanf("%d",原创 2016-01-05 16:25:12 · 535 阅读 · 0 评论 -
poj 1155 TELE 树形dp泛化背包
//poj 1155//sep9#include #include using namespace std;const int MAXN=3012;int n,m,ans;struct Node{ int v,w;};vector g[MAXN];int num[MAXN],dp[MAXN][MAXN];void dfs(int u){ for(int i=g[u].原创 2015-12-03 12:17:12 · 590 阅读 · 0 评论 -
poj 2264 Advanced Fruits dp解LCS的对偶问题
题意:给字符串a,b,求长度最短的包含a且包含b的字符串。分析:是个LCS的对偶问题,dp的方程也很像。代码://poj 2264//sep9#include using namespace std;const int MAXN=128;int dp[MAXN][MAXN],path[MAXN][MAXN];char a[MAXN],b[MAXN];void pr原创 2015-12-13 23:04:53 · 515 阅读 · 0 评论 -
poj 1849 Two 树形dp好题
题意:等价于在一棵树中,找m个叶子节点,使他们连线(重复部分只计一次)的距离和最大。分析:m==2时求树的直径倒是简单,m>2时就要用树形dp了,有n*m^2的树形dp.代码://poj 1849//sep9#include #include using namespace std;const int MAXN=100024;vector g[MAXN],val[M原创 2015-11-23 19:15:21 · 555 阅读 · 1 评论 -
poj 1283 Moving Computer dp解小球放小盒
//poj 1283//sep9#include using namespace std;typedef __int64 INT;const int MAXN=200;INT dp[MAXN+10][MAXN+10];int main(){ int N,K; memset(dp,0,sizeof(dp)); for(int i=0;i<=MAXN;++i) dp[i]原创 2015-12-11 17:33:01 · 630 阅读 · 0 评论 -
poj 2096 Collecting Bugs 概率dp
代码://poj 2096//sep9#include #include using namespace std;double E[1005][1005];int main(){ int n,s; while(scanf("%d%d",&n,&s)==2){ for(int i=0;i<=n+1;++i) for(int j=0;j<=s+1;++j)原创 2015-09-09 23:57:27 · 460 阅读 · 0 评论 -
poj 1739 Tony's Tour 插头dp模板题
题意:给一个迷宫,求左下角到右下角的路径数。分析:插头dp的模板题,建议先看cdq的论文再看代码,这份代码在模板基础上略微有改动。论文地址http://wenku.baidu.com/view/ed2b3e23482fb4daa58d4b74.html代码:#include using namespace std;const int maxD=16;const int H原创 2015-07-23 11:03:06 · 1306 阅读 · 0 评论 -
poj 3071 Football 概率dp
题意:有2*n只队伍参加n论的淘汰赛,给出任意两只队伍交战的各自的胜率,求最后剩下概率最高的队伍。分析:概率dp,dp[i][j]表示第i轮结束后队伍j还在场上的概率,dp[i][j]=dp[i-1][j]*sum(dp[i-1][k]p[j][k])(1>i==(k-1)>>i&&(j-1)>>(i-1)!=(k-1)>>(i-1),把每个队的id用二进制写出来画画图就知道为什么这样原创 2015-07-04 00:16:56 · 1281 阅读 · 0 评论 -
poj 3670 Eating Together dp
dp水题,直接贴代码。//poj 3670//sep9#includeusing namespace std;const int maxN=30024; int n;int a[maxN],b[maxN];int dp[maxN][4];int solve(int a[]){ int i,j; for(i=0;i<=n;++i) for(j=1;j<=3;++j)原创 2014-12-30 00:26:58 · 690 阅读 · 0 评论