题目大意:给定一个由‘W','I','N','G'构成的字符串,给定一些规则,这些规则可以将两个字符合成为一个,例如"II"可以合成为'W',"WW"可以合成为'I'或者'N'
求这个字符串可以最终合成为哪几种字符
看到这题我想到了广搜。。。其实没必要,动归完全可以解决
令f[i][j][k]为从i开始的j个字符是否可以合成为字符[k]
然后j从外层循环,剩下的全部预处理,怎么暴力怎么转移...
                            
                            
                                分类:
其他好文   时间:
2014-10-04 17:25:07   
                                阅读次数:
234
                             
                    
                        
                            
                            
                                之前没有怎么刷过dp的题,所以在此学习了~(感谢walala大神的思路,给了我很大的启发)也算是自己学习的另一种dp题型吧先贴上状态转移方程:if(a[i][j])f[i][j]=min(f[i-1][j],min(f[i][j-1],f[i-1][j-1]))+1 然后更新ans即可详细的解释一下...
                            
                            
                                分类:
其他好文   时间:
2014-10-04 11:24:56   
                                阅读次数:
138
                             
                    
                        
                            
                            
                                题意:n位长的01序列(0 
题目链接:http://poj.org/problem?id=1953
——>>设dp[i][j]表示前 i 位中第 i 位为 j 时的序列数,则状态转移方程为:
dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
dp[i][1] = dp[i - 1][0];
因为对于相同的n,其结果是固定的,所以可以对一个n只计算一...
                            
                            
                                分类:
其他好文   时间:
2014-10-04 11:04:46   
                                阅读次数:
143
                             
                    
                        
                            
                            
                                题目地址:Ural 1353
定义dp[i][j],表示当前位数为i位时,各位数和为j的个数。
对于第i位数来说,总可以看成在前i-1位后面加上一个0~9,所以状态转移方程就很容易出来了:
dp[i][j]=dp[i][j]+dp[i][j-1]+dp[i][j-2]+.......+dp[i][j-9];
最后统计即可。
代码如下:
#include 
#include 
#incl...
                            
                            
                                分类:
其他好文   时间:
2014-10-04 00:13:25   
                                阅读次数:
214
                             
                    
                        
                            
                            
                                /*
状压dp
刚开始&写成&&看了好长时间T0T.
状态转移方程
 dp[i][k][j]=Max(dp[i][k][j],dp[i-1][l][k]+num[i][j]);(第i行的第j个状态有上一行的第k个状态得到)
 num[i][j]有两个功能,第一:判断第i行第j个状态是否合法
                      第二:判断第i行第j个状态的数目
*/
#include
#in...
                            
                            
                                分类:
其他好文   时间:
2014-10-03 00:44:43   
                                阅读次数:
172
                             
                    
                        
                            
                            
                                题意:F朵花(从左到右标号为1到F,1 
——>>设dp[i][j]表示将前j种花放入前i个花瓶的最大好看度和,则状态转移方程为:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] + nValue[j][i]);
时间复杂度:O(F * V)
#include 
#include 
using std::max;
const int MA...
                            
                            
                                分类:
其他好文   时间:
2014-10-02 23:37:03   
                                阅读次数:
207
                             
                    
                        
                            
                            
                                题目给n个字母,构成长度为m的串,总共有n^m种。给p个字符串,问n^m种字符串中不包含(不是子串)这p个字符串的个数。将p个不能包含的字符串建立AC自动机,每个结点用val值来标记以当前节点为后缀的字符串是否包含非法字符串(p个字符串中的任何一个)。状态转移方程:f(i, j) += f(i-1,...
                            
                            
                                分类:
其他好文   时间:
2014-10-02 22:46:33   
                                阅读次数:
322
                             
                    
                        
                            
                            
                                题意:一个R * C的矩阵(1 
题目链接:http://poj.org/problem?id=1088
——>>设dp[i][j]表示从ij位置出发的最长路,则状态转移方程为:
dp[x][y] = max(dp[x][y], Dp(nNewX, nNewY) + 1);
时间复杂度:O(R * C)
#include 
#include 
#include 
using std...
                            
                            
                                分类:
其他好文   时间:
2014-10-02 22:42:13   
                                阅读次数:
213
                             
                    
                        
                            
                            
                                N个城市,M条道路,每条道路有其经过的代价,每个城市最多可以到达两次,求走完所有城市最小代价,起点任意。
三进制状压,存储每个状态下每个城市经过的次数。
转移方程: dp[i+b[k]][k]=Min(dp[i+b[k]][k],dp[i][j]+dis[j][k]);
#include "stdio.h"
#include "string.h"
const int inf...
                            
                            
                                分类:
其他好文   时间:
2014-10-02 21:43:33   
                                阅读次数:
201
                             
                    
                        
                            
                            
                                准确来说,动态规划是一种思想,而不是一种算法。算导里将它归结为——高级程序设计技巧。 在线性结构上进行状态转移DP,统称线性DP。 线性DP最常见的有: 子集和问题,LIS问题,LCS问题。 拓展之后有:子段和问题,杂类问题。1. 子集和问题和硬币计数问题子集和问题的一个实例: 〈S,t〉。其中,....
                            
                            
                                分类:
其他好文   时间:
2014-10-02 21:24:53   
                                阅读次数:
264