随笔分类 -  dynamic programming

*rebuilding roads<pku 1947>
摘要:~\Desktop\1947.cpp.html 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 #define inf 10000000 7 int s[160],p[160],v[160],dp[160][160],n,m; 8 void check(int root) 9 {10 for(int i=0;i<=m;i++) dp[root][i] = inf;11 dp[ 阅读全文
posted @ 2011-05-28 20:01 eth0 阅读(150) 评论(0) 推荐(0)
*炮兵阵地<pku 1185>
摘要:// 类似 2411 状态压缩 1 Source Code 2 3 Problem: 1185 User: eth1 4 Memory: 3452K Time: 297MS 5 Language: C++ Result: Accepted 6 Source Code 7 #include <iostream> 8 #include <cstring> 9 using namespace std;10 11 const int N = 1<<11;12 int dp[101][90][90];13 int graph[110];14 struct node15 阅读全文
posted @ 2011-05-23 22:11 eth0 阅读(186) 评论(0) 推荐(0)
*chores<pku 1949>
摘要:// 这题坑爹啊 , 米有看清这已经是topsort() 的了, 害我浪费20多分钟写了那么长还爆内存....Source CodeProblem: 1949 User: eth1Memory: 292K Time: 1500MSLanguage: C++ Result: AcceptedSource Code#include <iostream>#include <algorithm>#include <cmath>#include <cstring>using namespace std;//bool vis[10001][10001];in 阅读全文
posted @ 2011-05-20 22:24 eth0 阅读(150) 评论(0) 推荐(0)
*mondriaan's dream<pku 2411>
摘要:这题真没想出来有这么复杂,当然对我们新手来说,没状态压缩的意识,对位运算不理解,害得我看别人代码都想了半天... 首先这题是一道关于状态压缩dp f(i,j) 表示 第i行 状态为j 的个数 <怎么理解状态 j 呢? 二进制思想,假设一行有m个单位需要填充,我们就可以用0 or 1 来表示每一个单位上的属性【0 代表 1x2 单位是横放的不影响下一行,1 代表 1x2 是竖放的影响下一行就是表示下一行对应的 单位已经被填充了】 > 解题中我们可以枚举每一行每一个状态,即由上一行的状态能到达此状态的个数和。 // void dfs(int i, int j, int jj, int 阅读全文
posted @ 2011-05-19 21:16 eth0 阅读(163) 评论(0) 推荐(0)
*anniversary party<pku 2342>
摘要:// 树形dp , 父子兄弟法构建树形结构 , 状态方程 t[i].vis += t[t[i].child].novis || t[i].novis += t[t[i].child].maxx() 1 Source Code 2 3 Problem: 2342 User: eth1 4 Memory: 456K Time: 94MS 5 Language: C++ Result: Accepted 6 Source Code 7 #include <iostream> 8 #include <algorithm> 9 using namespace std;10 con 阅读全文
posted @ 2011-05-19 12:27 eth0 阅读(153) 评论(0) 推荐(0)
*cornfields <pku 2019>
摘要:// 二维 rmq . 1 // author : gssn 2 // date : 5.17 3 #include <iostream> 4 #include <cmath> 5 using namespace std; 6 int maxx[255][255][8],minn[255][255][8],f[255][255]; 7 int n,b,kk; 8 void init() 9 {10 int len = int(log(double(n)) / log(2.0));11 for(int k=1;k<=len;k++)12 {13 for(int i= 阅读全文
posted @ 2011-05-17 14:23 eth0 阅读(203) 评论(0) 推荐(0)
*balanced lineup<pku 3264>
摘要:// rmq<区间最指查询> , 不过不知道为什么跑起来忒慢... 1 // author : gssn 2 #include <iostream> 3 #include <cmath> 4 using namespace std; 5 int minn[50005][16],maxx[50005][16],f[50010]; 6 int n,m; 7 void init() 8 { 9 int len = int(log((double)n) / log(2.0));10 for(int j=1;j<=len;j++)11 for(int i=1;i 阅读全文
posted @ 2011-05-17 13:28 eth0 阅读(127) 评论(0) 推荐(0)