<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[acblacktea的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/acblacktea</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; acblacktea]]></copyright><item><title><![CDATA[hdoj 2665 主席树模版]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/69936828</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/69936828</guid><author>acblacktea</author><pubDate>Sun, 09 Apr 2017 21:57:56 +0800</pubDate><description><![CDATA[原理：https://www.zhihu.com/question/31133885 
教程：http://www.cnblogs.com/zyf0163/p/4749042.html 
基本半天可以学会，不好的教程可能扣一天#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<cst]]></description><category></category></item><item><title><![CDATA[机器学习实战 kNN算法]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/61208554</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/61208554</guid><author>acblacktea</author><pubDate>Fri, 10 Mar 2017 21:12:34 +0800</pubDate><description><![CDATA[#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#Remove dict.iteritems(), dict.iterkeys(), and dict.itervalues().
#Instead: use dict.items(), dict.keys(), and dict.values() respectively.

# 线代和矩阵操作库
f]]></description><category></category></item><item><title><![CDATA[codeforces 373div1 Sasha and Array 矩阵+线段树]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52749543</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52749543</guid><author>acblacktea</author><pubDate>Fri, 07 Oct 2016 14:58:21 +0800</pubDate><description><![CDATA[用线段树储存价值和，因为矩阵 a1 * b + a2 * b + a3 * b + a4 * b + a5 * b = (a1 + a2 + a3 + a4 + a5) * b;  
然后进行下优化，尽量减少快速幂的运算数量#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#define lson i<]]></description><category></category></item><item><title><![CDATA[383C - Propagating tree 线段树加时间戳]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52473625</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52473625</guid><author>acblacktea</author><pubDate>Thu, 08 Sep 2016 17:33:00 +0800</pubDate><description><![CDATA[首先每次处理以一个点为根的所有子树点 就要用时间戳加线段树区间更新 
因为每次add一个点，那么加减是交替的，所以线段树存储深度为奇数的点的add值 
最后查询如果是偶数 ans = -ans;#include<cstdio>
#include<algorithm>
#include<iostream>
#define maxn 200005
#define LL long long
#define]]></description><category></category></item><item><title><![CDATA[codeforces 711E 勒让德定理 逆元]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52454482</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52454482</guid><author>acblacktea</author><pubDate>Tue, 06 Sep 2016 22:37:45 +0800</pubDate><description><![CDATA[要先化简再取模 
公式很好推主要是化简 
用到两条性质 
1. gcd(2^n - k, 2^n) = gcd(k, 2 ^ n) 
因为当k为奇数 2^n - k 为奇数 那等式两边都为1 
当k为偶数时 2^n - k 为偶数 k = b * 2^k1 b为奇数 2^n - k = 2^k1*(2^(n-k1)-b) 2^(n-k1)-b 是奇数，所以gcd(2^n - k, 2^n) = gc]]></description><category></category></item><item><title><![CDATA[codeforces 711D	Directed Roads dfs]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52448949</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52448949</guid><author>acblacktea</author><pubDate>Tue, 06 Sep 2016 12:46:58 +0800</pubDate><description><![CDATA[首先给的每个点只有一个出度既不可能有大于一个出度 
每条边可以改变方向 
所以每个点最多只能在一个环上，且所有有向环的信息已经给出因为每个点只有一个出度 
dfs把每个环都求出来 ans *（ 2^n(环的边数) - 2） 
最后ans * 2^m（链的边数）#include<cstdio>
#include<algorithm>
#include<iostream>
#include<map>
#]]></description><category></category></item><item><title><![CDATA[codeforces Recover the String]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52444501</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52444501</guid><author>acblacktea</author><pubDate>Mon, 05 Sep 2016 22:41:43 +0800</pubDate><description><![CDATA[题目很好推 00的个数推0的个数 11的个数推1的个数 如果存在那么就判断四个数的合是否为 C(0和1的总个数，2)如果存在有解贪心一下就行即根据第二个数值和1的位置固定然后叉进0最后使其成立 
有个超级坑的就是00或11的个数 是0时那0或1的个数是0 或者是1要特殊判断！！！！#include<cstdio>
#include<cstring>
#include<algorithm>
#incl]]></description><category></category></item><item><title><![CDATA[湖南省赛 有向无环图 水dp]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52442926</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52442926</guid><author>acblacktea</author><pubDate>Mon, 05 Sep 2016 19:33:24 +0800</pubDate><description><![CDATA[如果两个点之间有多条边，那就相当于一个点连多个相同的点然后dfs跑一下累加和就行了记得记忆化搜索剪枝#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define mod 1000000007ll
#define maxn 100005
#define LL long long
using names]]></description><category></category></item><item><title><![CDATA[hihocoder #1228 : Mission Impossible 6 模拟]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52439165</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52439165</guid><author>acblacktea</author><pubDate>Mon, 05 Sep 2016 12:27:07 +0800</pubDate><description><![CDATA[总结 ：1 .题意理解 
            2. 插入要从后往前枚举更新， 删除要从前往后枚举更新数据结构没学好。。。。#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define maxn 100005
using namespace std;
int flagOve;
int po, co]]></description><category></category></item><item><title><![CDATA[hihocoder Boxes 状压八进制bfs 加预处理]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52432788</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52432788</guid><author>acblacktea</author><pubDate>Sun, 04 Sep 2016 15:45:49 +0800</pubDate><description><![CDATA[每三位代表第i个格子的目前位置 这三位为0代表没这个数 
然后最多7个数 也就是 8^7 约等于 400000 所有从终点到起点反向预处理 
学到的技巧 
数据量不大要先想到搜索 
如果感觉这时搜索会超时可以考虑预处理什么的#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>]]></description><category></category></item><item><title><![CDATA[poj 3345 Bribing FIPA 树形dp]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52431195</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52431195</guid><author>acblacktea</author><pubDate>Sun, 04 Sep 2016 11:06:22 +0800</pubDate><description><![CDATA[dp[i][j] 代表第i个点获取j个体积所需最小价值， 
每个物品的体积就是它所支配的子节点的数量，价值就是它的点值了#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<map>
#include<vector>
#define maxn 205
us]]></description><category></category></item><item><title><![CDATA[poj 2486 树形dp]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52425340</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52425340</guid><author>acblacktea</author><pubDate>Sat, 03 Sep 2016 20:52:46 +0800</pubDate><description><![CDATA[dp[i][j][0] 代表走到第i个点 还能走j步 最后返回i的最大价值 
dp[i][j][1] 代表走到第i个点 还能走j步 最后不返回i的最大价值 
一般目标来回往返并每步都有消耗的题都是这种记录往返标识的dp#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define maxn 204
u]]></description><category></category></item><item><title><![CDATA[poj 1947 Rebuilding Roads 树形dp背包]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52423295</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52423295</guid><author>acblacktea</author><pubDate>Sat, 03 Sep 2016 15:14:16 +0800</pubDate><description><![CDATA[dp[i][j] 代表以i为根 大小为j需要拆的最小边数 
然后dp 注意边界处理对于每个子节点x不连的话dp[i][j] + 1连得话就是 dp[i][j - k] + dp[x][k]; 
然后除了根节点最后计算结果都要加1因为还要把跟父节点相关的边拆掉 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostrea]]></description><category></category></item><item><title><![CDATA[poj 1155 TELE 树形背包dp]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52416951</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52416951</guid><author>acblacktea</author><pubDate>Fri, 02 Sep 2016 21:09:44 +0800</pubDate><description><![CDATA[dp[i][we] 代表节点为i 给k个消费者提供信号的所赚钱术 这时we就是背包容量，每个子节点的每个dp[son][j] 0 <=j<= num[j]; 就是各个物品了#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#define mini -100000000
#define maxn 3005]]></description><category></category></item><item><title><![CDATA[codeforces 218D Choosing Capital for Treeland  树形DP]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52415321</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52415321</guid><author>acblacktea</author><pubDate>Fri, 02 Sep 2016 16:53:13 +0800</pubDate><description><![CDATA[给一个有向树每条边可以改变方向求改变的最小边数使其最后连通 
先dfs一下求出以1为根的每个点与儿子联通的最小改变数 
然后再dfs合并它与父亲的联通信息#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#define maxn 200005
using namesp]]></description><category></category></item><item><title><![CDATA[hdoj 2196 Computer 树形dp经典题]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52413070</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52413070</guid><author>acblacktea</author><pubDate>Fri, 02 Sep 2016 13:01:50 +0800</pubDate><description><![CDATA[首先简单的树形dp求祖宗到儿子的最长距离并记录最短距离是哪个儿子 
此时对于每个点只维护了儿子到它的最短距离 
还要记录祖宗到它的最短距离这时需要再跑一遍dfs把每个点与祖宗相关的到它的最长边搞出来 
经典模型必须熟悉啊！！！！！！#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<ve]]></description><category></category></item><item><title><![CDATA[hdoj 5787 K-wolf Number 数位dp xjb搞水过]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52404164</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52404164</guid><author>acblacktea</author><pubDate>Thu, 01 Sep 2016 22:55:51 +0800</pubDate><description><![CDATA[二维记录前五个数的转态和先后顺序 数组53MB水过。。。。#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std;
LL dp[18][100001][4];
LL l, x[20];
bool judge(LL n, LL k]]></description><category></category></item><item><title><![CDATA[hdu 4352 XHXJ's LIS 状压数位dp]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52403278</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52403278</guid><author>acblacktea</author><pubDate>Thu, 01 Sep 2016 20:49:35 +0800</pubDate><description><![CDATA[求a - b 的按每位值来最长lis长度为k的个数 
当求lis时 每加入一个数看此时的lis中有没有数大于等于它且前一个数小于它，有的话将这个位置替换成这个数，没有的话把它填入到末尾 lis+1 
所以dp[i][sym][len] 代表 推到第i位，此时组成状态为sym, 最后lis长度为len的方案数 
注意处理前导0#include<cstdio>
#include<algorithm>
#]]></description><category></category></item><item><title><![CDATA[hdu 4507 吉哥系列故事――恨7不成妻 数位dp]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52400526</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52400526</guid><author>acblacktea</author><pubDate>Thu, 01 Sep 2016 15:58:20 +0800</pubDate><description><![CDATA[dp[i][mod1][mod2][0] 为 第i位后 数位和%7为mod1 数值%7为mod2 的满足条件的累加值的和 
dp[i][mod1][mod2][1] 为 第i位后 数位和%7为mod1 数值%7为mod2 的满足条件的累加平方值的和 
dp[i][mod1][mod2][2] 为 第i位后 数位和%7为mod1 数值%7为mod2 的满足条件的数量和 
然后累加值 和 数量都是最普通]]></description><category></category></item><item><title><![CDATA[spoj BLANNUM 数位状压dp]]></title><link>https://blog.youkuaiyun.com/acblacktea/article/details/52397204</link><guid>https://blog.youkuaiyun.com/acblacktea/article/details/52397204</guid><author>acblacktea</author><pubDate>Thu, 01 Sep 2016 10:50:15 +0800</pubDate><description><![CDATA[这题刚开始想的关系不对是因为没有考虑这个奇偶是相对于出现的数字来说的 
所以dp[1024][1024][21][2] 一维代表出现的数字的状压形记录，二维表示出现数字奇偶的记录，三维代表推到第几位，四维代表是否有前导非零数 
然后数位dp就行了#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#inc]]></description><category></category></item></channel></rss>