每个前面大的后面小的都需要使他们保持平衡
1 |
|
每个前面大的后面小的都需要使他们保持平衡
1 | #include <bits/stdc++.h> |
读懂题就行,不用排序找一下最小的是不是多个
1 | #include <iostream> |
找出树的重心
s数组表示包括此点产生的所有子树的点的和
f数组表示以此点为重心切产生的最大子树的节点数
1 | /* From: Lich_Amnesia |
树形DP
用dp[i][0]来表示该点没有放兵,以这个点为根的子树所需的最少兵数。
用dp[i][1]来表示该点有放兵,以这个点为根的子树所需的最少兵数。
那么可以得到状态方程
dp[fa][0]+=dp[son][1];//如果该父亲不放,那么儿子必须放
dp[fa][1]+=min(dp[son][0],dp[son][1]);//如果该父亲放,儿子在放和不放之间选择最小的
访问的时候,因为要先知道儿子的信息,用递归的解法
1 | /* From: Lich_Amnesia |
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=31424#overview
自己搜集的一些SG和博弈类的题目
题目:给出一串石头,和一个集合,每次取出若干个连续的石头(数量必须为集合中的),最后取完的获胜,问有没有必胜策略。
http://acm.hdu.edu.cn/showproblem.php?pid=2999
好像不是很理解SG函数的含义, 可还是乱七八糟的搞出了SG,然后水过去。
对于一个连续的串,比如说长度为5,可行只有2,那么取了之后可能分为两段
如后继可能为:(1,3),{(1),(4,5)},{(1,2),(5)},{3,5}这四种情况。两个区间异或之后,取mex操作
虽不明但觉厉,然后就AC了。
局面是确定的,没有存在不确定的情况
1 | /* |
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=31424#overview
自己搜集的一些SG和博弈类的题目
题目:给出一串石头,和一个集合,每次取出若干个连续的石头(数量必须为集合中的),最后取完的获胜,问有没有必胜策略。
http://acm.hdu.edu.cn/showproblem.php?pid=2999
好像不是很理解SG函数的含义, 可还是乱七八糟的搞出了SG,然后水过去。
对于一个连续的串,比如说长度为5,可行只有2,那么取了之后可能分为两段
如后继可能为:(1,3),{(1),(4,5)},{(1,2),(5)},{3,5}这四种情况。两个区间异或之后,取mex操作
虽不明但觉厉,然后就AC了。
局面是确定的,没有存在不确定的情况
1 | /* |
1 | import java.math.BigInteger; |
大意是,在一条线上有`N个城市,它们由一个污水处理系统连接着,每个城市有三个选择:
1.把自己的污水排到河里V
2.把自己的污水送到右边>
3.把自己的污水送到左边<
至少要有一个城市排水。要求给N个城市,方案种数。
最左边只有两种选择:V,>
令 dp[i][0]:V
dp[i][1]:>
dp[i][2]:<
则:dp[i][0]=dp[i-1][0]+dp[i-1][1]+dp[i-1][2]
dp[i][1]=dp[i-1][0]+dp[i-1][1]+dp[i-1][2]
dp[i][2]=dp[i-1][0]+dp[i-1][2]//刚开始总是很但是会不会有没有城市排水的问题,但是这个方程保证了不会出现><的情况
但是这三个方程不能保证不会出现一排全是>>>>>的情况,所以在算最后一个的时候,只能算dp[n][0]+dp[n][2]
注意到dp[i][0] dp[i][1]总是相等,所以可以少列一个状态转移方程
dp[i][0]=2*dp[i-1][0]+dp[i-1][2]
dp[i][2]=dp[i-1][0]+dp[i-1][2]
即dp[i]=3*dp[i-1]-dp[i-2]
到此为止,整个状态转移方程就列出来了。
由于dp的值可能会很大,所以就要用到java里面的BigInteger
1 | import java.io.*; |
使用
1 | mysql -u root -p |
启动Mysql报错
1 | ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) |
然后
1 | su - |
还是出现
1 | ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) |
发现是service 这里可能会有问题
用绝对路径启动就行了
1 | /etc/init.d/mysqld start |
启动Mysql
完整命令
1 | su - |
给定整数N,和一个序列的逆序数M,求以1,2…N为元素,逆序为M,且按字典序最小的那个序列。
只要知道这样一个事实:一个序列的逆序唯一决定了这个序列。
对这个问题可以采取贪心策略。
首先,如果所求序列以1为首,则1的逆序为0,可以从上表看出此时序列的逆序数最多为2+1=3<5,不满足。考虑以2为首,序列的逆序最多为3+1<5,不满足。
考虑以3为首,可见当1的逆序为3,2的逆序为2,4的逆序为0时满足要求,这时1,2,4均为最大逆序,因而只能排列为4,2,1,加上首数,所求序列为3,4,2,1。
若M=3,采取同样的贪心策略,可求得结果为1,4,3,2。
依此思路,可以得到所求序列关于N,M的关系式,具体如下:
1,2,3,…N-P, N-((p-1)p/2-M), N , N-1…N-P+1.(P是满足(P-1)P/2>=M的最小值)。
代码就容易多了。
正好按照那样的排列会出现多了几个逆序数的情况,这样只需要把多的那个值的逆序的那个数移动到前面去就可以了
1 | /* From: Lich_Amnesia |