思路: 莫队算法+树状数组. 莫队算法的基本思想是对大量要查询的区间进行离线处理,按照一定的顺序计算,来降低复杂度.概括来说,我们在知道了[l, r]的解,并且可以通过一个较低的复杂度推出[l - 1, r], [l, r - 1], [l + 1, r], [l, r + 1]的解的情况下,则可使用该算法. 对该算法比较好的介绍: 1.https://blog.sengxian.com/algorithms/mo-s-algorithm 2.http://blog.csdn.net/bossu…
思路: 并查集的应用. 实现: #include <iostream> #include <cstdio> using namespace std; ][]; int n, x, y; ]; ]; ] = { , , -, }; ] = { , , , - }; void init(int n) { ; i < n; i++) { ran[i] = ; par[i] = i; } } int find(int x) { if (par[x] == x) return x; r…
思路: 状态压缩 + dp. 实现: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; int t, n, m, s; ], S[], dp[][( << ) + ]; int dfs(int now, int s) { ) return dp[…
思路: 我用的尺取. 注意题目描述为恰好2个'h',1个'i',1个'o'. 实现: #include <iostream> #include <cstdio> #include <string> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; ], ci[], co[]; bool check(int pos, int a, int b, int c) { &…
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望选择若干道不同的菜品,使得总价在不低于X元的同时尽量低. 你能算出这一餐小Ho最少消费多少元吗? 输入 第一行包含两个整数N和X,(1 <= N <= 20, 1 <= X <= 100) 第二行包含N个整数A1, A2, ..., AN.(1 <= Ai <= 100)…
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素,从小到大放在队列中,再把b按顺序放入另一个队列中,每次取出两队列中较小值即可. #include<bits/stdc++.h> using namespace std; typedef long long ll; ]; queue<int>q1, q2; vector<int&g…
[题目链接]:http://hihocoder.com/problemset/problem/1488 [题意] 中文题 [题解] 莫队算法+树状数组; 首先贪心地知道,应该按照时间从小到大的顺序打水; 可以发现; 新增加一个人打水的话,对时间小于它的人打水没有影响; 只对时间大于它的人打水的时间有影响; 具体的; 对于时间大于它的打水的人的个数*这个人打水的时间;是新增加的打水时间; 然后同时还要加上这个人单独打水的时间; 即在它前面(时间比它小的打水的人)的所有打水时间总和+这个人的打水时间…
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和B应该都能AC的,但是A题由于脑子二笔了一下,最后终测T掉了.不过很奇怪,最后分数也没有跌,反而涨了,终于要接近紫名了,下一发不跌的话,应该有紫了.然后说一下这场Hihocoder吧,据说有offer面试名额,然后选了网易游戏和微软,虽然很是想去微软的,但是又二笔了几发,这就这样了.. A题:九宫(…
思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = sum{ dp[k] | 1 < k < i && sum(k+1,i)!=0 } = sum{ dp[k] | 1 < k < i } - sum{ dp[k] | 1 < k < i && sum(k+1,i)==0 } 关键是求后半部分怎…
[题目链接]:http://hihocoder.com/problemset/problem/1486 [题意] [题解] 设f[i][j]表示前i个物品,每种属性的状态奇偶状态为j的最大价值; 这里用j的二进制对应每种属性的状态; 为1表示那种属性的物品个数为奇数否则为偶数 f[i][j] = max(f[i-1][j],f[i-1][j^zt[i]]+jz[i]); zt[i]是第i个物品拥有的属性的状态,jz[i]是第i个物品的价值 最后输出f[n][(1<< m)-1]就好; [Num…