摘要:        
知道按位贪心但是不知道怎么贪…… 求一个a的异或前缀和s,然后按位从大到小贪心,ans的当前位能为0的条件是s中有 =m个位置这一位为0且没有flag,并且s[n]的这一位为0 如果符合要求,那么把s中这一位不为0的位置都打上flag,表示这些点不能作为区间断点了(如果作为断点的话这一位就要为1了,    阅读全文
posted @ 2018-09-12 20:16
lokiii
阅读(157)
评论(0)
推荐(0)
        
            
        
        
摘要:        
bzoj上访问负下标会跑到奇怪的地方…… 其实可以滚动数组优化,但是我看能过就懒得改了 设f[i][j]为已经算了前i个挂饰,当前有j个空的钩子,转移就是f[i][j]=max(f[i 1][j],f[i 1][max(min(j a[i]+1,n), n)]+b[i]) 注意到只有 n inclu    阅读全文
posted @ 2018-09-12 19:38
lokiii
阅读(109)
评论(0)
推荐(0)
        
            
        
        
摘要:        
如果确定了第一行,那么可以推出来整个矩阵,矩阵合法的条件是n+1行全是0 所以推出来n+1行和1行的关系,然后用异或高斯消元来解即可 cpp include include using namespace std; const int N=45; int n,m,f[N][N][N],a[N][N]    阅读全文
posted @ 2018-09-12 16:44
lokiii
阅读(113)
评论(0)
推荐(0)
        
            
        
        
摘要:        
以后写dp还是向后转移吧……写的把前面加起来的版本怎么也调不过去 首先注意,因为地图碎片只占1体积,所以 n, include using namespace std; const int N=405; int n,l,m,a[N]; double p[N],f[2][N][N],ans; int     阅读全文
posted @ 2018-09-12 11:40
lokiii
阅读(151)
评论(0)
推荐(0)
        
            
        
        
摘要:        
先做最小生成树,这样就保证了最大值最小 然后随便用个什么东西维护一下最大值,我用的树剖log^2,倍增会更快 cpp include include include using namespace std; const int N=100005; int n,m,k,f[N],h[N],cnt,va    阅读全文
posted @ 2018-09-12 09:44
lokiii
阅读(132)
评论(0)
推荐(0)
        
            
        
        
摘要:        
没考虑可以连着两个不选……直接染色了 实际上是基环森林,对于每棵基环树,dfs找出一个环边,然后断掉这条边,分别对这条边的两端点做一边treedp,取max加进答案里 treedp是设f[u]为选u点,g[u]为不选u点,然后随便转移一下就行了 cpp include include using n    阅读全文
posted @ 2018-09-12 09:08
lokiii
阅读(140)
评论(0)
推荐(0)
        
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号