摘要:
题面传送门 显然树形$dp$ 转移时直接考虑这颗子树选或不选。\(dp_v=dp_v\times (dp_u+1)[u∈v]\) 代码实现: #include<cstdio> #define beg int cur=s.h[x] #define end cur #define go cur=tmp. 阅读全文
摘要:
题面传送门 这道题显然是对于每个卖出股票,在前面找到最小的买进,统计答案即可。 代码实现: class Solution { public: int maxProfit(vector<int>& prices) { int a[1000039]; int i,j,ans=0,tot=0; int n 阅读全文
摘要:
题面传送门 一道好题。 首先有一个操作:如果有$n$个$a$,$n$个$b$,那么可以通过$n$次变成$2n$个$c$ 那么考虑倍增,每次选取两块拿来合并。 然后对于前一部分和后一部分分别倍增就好了。 代码实现: #include<cstdio> using namespace std; int n 阅读全文
摘要:
题面传送门 考虑暴力建分层图dp 实际上就是对于每个时间建到下一层的图就好了。 然后停留就是自环,爆炸就连向永远走不出来的点。 其实这个东西是可以矩乘优化的。 然后复杂度就降到$O(logtn^3)$ 代码实现: #include<cstdio> #define mod 2017 using nam 阅读全文
摘要:
题面传送门 数据太大了,所以要hash。 多取几个模数正确性更高。 代码实现: #include<cstdio> #define mod 1000000007 using namespace std; int x,y,z,n,m,k,head,ans[100039],fff; long long t 阅读全文