_xiaobai_

导航

2011年8月20日

zoj3034 The Bridges of Kolsberg(DP)

摘要: /*经典模型:最长公共子序列+字符串处理 */View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #define max( a, b ) ((a)>(b)?(a):(b)) 6 7 char LeftOS[ 1001 ][ 12 ]; 8 char RightOS[ 1001 ][ 12 ]; 9 int LeftID[ 1001 ];10 int LeftV[ 1001 ];11 int RightID[ 1001 ];12 int RightV 阅读全文

posted @ 2011-08-20 09:26 _xiaobai_ 阅读(298) 评论(0) 推荐(0) 编辑

2011年8月19日

zoj1738 Lagrange's Four-Square Theorem(DP)

摘要: /*经典模型:完全背包本问题有两种考虑思路:1.一维多重背包,每个阶段由一个状态改为四个状态,容易想到跟阶段间的转移方程。2.二维完全背包,同一维一样,转移方程:F(i,j,k) = opt{ F(i-V(i),j-C(i),k-1),F(i,j,k-1) } (k为阶段)*/View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 int F[ 5 ][ 32770 ]; 5 6 int main() 7 { 8 int i,j,k; 9 memset( F, 0, sizeof( F ) );10 F[ ... 阅读全文

posted @ 2011-08-19 23:02 _xiaobai_ 阅读(259) 评论(0) 推荐(0) 编辑

zoj1342 Word Index(DP)

摘要: /*和前面的几道题目很像,也是基于前后大小关系的字符串DP状态为:F(l,s) 代表长度为l的起始为s的元素的个数。按长度为阶段,转移方程为:F(l,s) = sum{ F(l-1,t) } ( s < t )然后利用递推关系计算出所有长度为l的小于这个串的个数在加上长度小于l的串的个数即可。╮(╯▽╰)╭,刚开始状态设成:长度为l的结束为e的元素的个数,不好推,纠结了好久。。。*/View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 int Count[ 6 ][ 27 ]; 5 char Data[ 阅读全文

posted @ 2011-08-19 18:23 _xiaobai_ 阅读(230) 评论(0) 推荐(0) 编辑

2011年8月18日

zoj3310 Unrequited Love (DP)

摘要: /*不错的题目:如果没有首尾相连的话,这个题目就很简单了: 动态方程:F( n ) = max( F[ n-1 ], F[ n-2 ] +D[ n ] ) 题目分析: 现在告诉我们首尾相连,为了无后效性,我们要把环拆开。 我们把起始时分为两种状况,取或不取,当取第一个元素时,我们DP到n-1位置;当不取第一个元素时,我们DP到n位置。 时间复杂性:O(n) */View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 int D[ 1000002 ]; 5 int F[ 1000002 ]; 6 int G[ 10 阅读全文

posted @ 2011-08-18 12:50 _xiaobai_ 阅读(377) 评论(0) 推荐(0) 编辑

zoj2271 Chance to Encounter a Girl(DP)

摘要: /*概率计算:按时间为阶段,每个点由上一阶段周围的四个点来维护。注意事项:1.时间O(N^3*T),在问题的边缘时间,所以打表计算。 2.关于概率的求解,如果遇到就结束了,所以向后走就说明 之前没有碰到,所以不用前面的碰到的概率计算后面的值。 */View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 double answ[ 51 ] = { 5 0.0000,0.6667,0.0000,0.4074,0.0000, 6 0.3361,0.0000,0.2928,0.0000,0.2629, 7 0.0000, 阅读全文

posted @ 2011-08-18 12:18 _xiaobai_ 阅读(564) 评论(0) 推荐(0) 编辑

zoj1093 Monkey and Banana(DP)

摘要: /* 经典模型:最大不下降子序列,将每个箱子旋转三次即可,用贪心可证,长边对齐原则 */View Code 1 #include <iostream> 2 #include <cstdlib> 3 4 using namespace std; 5 6 int P[ 6 ][ 3 ] = { 7 0,1,2,0,2,1, 8 1,0,2,1,2,0, 9 2,0,1,2,1,0};10 11 struct node{12 int D[ 3 ];13 }N[ 31 ],S[ 185 ];14 15 int DP[ 185 ];16 17 int cmp( const voi 阅读全文

posted @ 2011-08-18 02:11 _xiaobai_ 阅读(186) 评论(0) 推荐(0) 编辑

zoj1022 Parallel Expectations(DP)

摘要: /* 这道题算不上难题,不过算得上的麻烦题了。设状态 T[ i ][ j ] 为程序1执行i条指令,程序2执行j条指令后的变量平均值,P1为程序1指令i的概率,P2为程序2指令j的概率则容易推出,T[ i ][ j ] = (T[ i-1 ][ j ]*P1+T[ i ][ j-1 ]*P2)/(P1+P2) 不过需要注意几点: 1.理解题意很重要,这个题很容易误解 。如果认为每种指令执行的情况是一样的话,就会求错方程:(设N[ i ][ j ]为状态T[ i ][ j ]数量 ) P1 = N[ i-1 ][ j ]/N[ i ][ j ]P2 = N[ i ][ j-1 ]/N[ i ][ 阅读全文

posted @ 2011-08-18 02:08 _xiaobai_ 阅读(674) 评论(1) 推荐(0) 编辑

zoj1986 Bridging Signals(DP)

摘要: /* 单调队列优化的最大上升子序列 O(NlogN)算法*/View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int data[ 40000 ]; 6 int Queu[ 40000 ]; 7 8 int Search( int h, int key ) 9 {10 if ( key <= Queu[ 0 ] ) return 0;11 int m,l = 0;12 while ( l < h ) {13 m = (h+l)>> 阅读全文

posted @ 2011-08-18 02:05 _xiaobai_ 阅读(200) 评论(0) 推荐(0) 编辑

zoj1642 Match for Bonus(DP)

摘要: /*简单DP:裸的最大公共子序列 */View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 5 using namespace std; 6 7 int CtoI( char ch ) 8 { 9 if ( ch >= 'a' && ch <= 'z' )10 return ch - 'a';11 else return ch - 'A' + 26;12 }13 14 i 阅读全文

posted @ 2011-08-18 02:02 _xiaobai_ 阅读(206) 评论(0) 推荐(0) 编辑

zoj1245 Triangles(DP)

摘要: /*动态三角形:每次DP时考虑的是两个子三角形的高度即可注意:三角形可以是倒置的。 */View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 #include <stdio.h> 5 6 using namespace std; 7 8 char Tri[ 101 ][ 201 ]; 9 short Val[ 101 ][ 201 ];10 11 int main()12 {13 int n,cases = 1;14 while ( scanf(&q 阅读全文

posted @ 2011-08-18 02:01 _xiaobai_ 阅读(227) 评论(0) 推荐(0) 编辑