首先tarjan缩点,重新建图后,每个点的权值就是该点包含点的个数。
然后从入度为0的点开始记忆化搜索,dp[i]表示以i为根最多包含多少点。
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define inf 0x3f3f3f3f
#define e...
                            
                            
                                分类:
其他好文   时间:
2014-07-02 08:37:48   
                                阅读次数:
211
                             
                    
                        
                            
                            
                                题目//传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的//题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的分值。//解题思路:记忆化搜索,状态出来就非常水,dp[fl][fr][sl][sr][flag],//...
                            
                            
                                分类:
其他好文   时间:
2014-07-01 12:55:43   
                                阅读次数:
254
                             
                    
                        
                            
                            
                                给出m条a年龄大于等于b的信息,要求可以比较的两个人不能放在同一组,问最少能分成几组。
由于是大于等于,所以原图可能构成强连通分量,意思就是有很多人年龄相同(想想也该知道,总共10w个人,肯定有很多人年龄重复= =!)将原图缩点后,对新图记忆化搜索求最长路。
如果不缩点,会RE。。。
#include 
#include
#include
#include
#include
using na...
                            
                            
                                分类:
其他好文   时间:
2014-07-01 10:47:45   
                                阅读次数:
269
                             
                    
                        
                            
                            
                                dp[a][b][c],表示三个人从小到大依次在a,b,c位置时,距离结束最少的时间。
每次选一个人走到c+1位置搜索就好了。
坑点在于不能floyd,估计题目没说清楚,意思就是如果没送Li,那么Li~n的点连去都不能去。
#include
#include
#include
#include
using namespace std;
#define INF 0x3f3f3f3f
int d...
                            
                            
                                分类:
其他好文   时间:
2014-07-01 09:26:40   
                                阅读次数:
248
                             
                    
                        
                            
                            
                                题意:有两堆n张的卡片,每张卡片有一个得分,Alice和Bob轮流在两堆卡片的两端取卡片
问Alice先手,取得分数最多为多少;
#include   
#include   
#include   
#include   
#include  
#include   
#define M 50  
#define LL long long  
using namespace ...
                            
                            
                                分类:
其他好文   时间:
2014-06-30 17:39:36   
                                阅读次数:
258
                             
                    
                        
                            
                            
                                题目要求一个最大的弱联通图。
首先对于原图进行强连通缩点,得到新图,这个新图呈链状,类似树结构。
对新图进行记忆化dp,求一条权值最长的链,每个点的权值就是当前强连通分量点的个数。
/*
Tarjan算法求有向图的强连通分量set记录了强连通分量
Col记录了强连通分量的个数。
*/
#include 
#include
#include
#include
#include
usin...
                            
                            
                                分类:
其他好文   时间:
2014-06-27 10:12:12   
                                阅读次数:
275
                             
                    
                        
                            
                            
                                Triangle War
Time Limit: 1000MS
 
Memory Limit: 65536K
Total Submissions: 2685
 
Accepted: 1061
Description
Triangle War is a two-player game played on the following tria...
                            
                            
                                分类:
其他好文   时间:
2014-06-27 09:34:45   
                                阅读次数:
286
                             
                    
                        
                            
                            
                                用记忆化写概率DP写的越来越纯真了。。
感觉记忆化很好写。。。
#include 
#include
#include
#include
using namespace std;
#define maxn 1100
#define eps 1e-6
#define zero(x) (fabs(x)<0?0:x)
double mp[maxn][maxn][4];
double dp[maxn]...
                            
                            
                                分类:
其他好文   时间:
2014-06-24 22:07:09   
                                阅读次数:
278
                             
                    
                        
                            
                            
                                以后还是使用递推把,不能用记忆化了,记忆化太耗时间了。。。
因为N很小,所以我们可以用状态压缩。用压缩起来的状态表示已经拥有的卡片。
然后根据状态之间的关系进行求解。
#include 
#include
#include
#include
using namespace std;
#define maxn 110000
#define eps 1e-6
#define zero(x) (f...
                            
                            
                                分类:
其他好文   时间:
2014-06-24 18:29:40   
                                阅读次数:
184