ACM习题
ACM习题集
Dαīsч
这个作者很懒,真的什么都没留下…………
展开
-
kmp算法
求next数组,含义:从第j个向前k个元素与从第1个向后k个元素相同,k就是next[j]的值。int nex[maxn], len;void kmp(){ int i, j; i = 0; j = -1; nex[0] = -1; while (i < len) { if (j == -1 || s[i] == s[j]) nex[++i] = ++j; else j = nex[j]; } return;}...原创 2022-02-17 12:25:05 · 819 阅读 · 0 评论 -
二分查找、二分算法
二分第一天,斯,雀氏南。下面记录一些心得体会。相信我们之前都玩(写)过一个猜数字的游戏,比如猜一个1~99之间的随机数,有n次机会,每次猜测会有一个交互---大了、小了、正确。这个就跟二分算法很相似。为了用最少的次数来猜中这个随机数,我们先选猜50((1+99)/2),然后根据回答来选择比50大(小)的数,那么这个随机数一定在51~99中,之后重复上述操作知道找到正确答案。二分算法有很多相同的关键点:交互->判断,1~99->单调区间,猜中间数->mid取区间中值。二分大概两个原创 2022-01-18 15:12:43 · 252 阅读 · 0 评论 -
搜索入门(dfs,bfs)
这种题很明显的标志:做一件事情有很多步骤,每一个步骤有几个方法,寻找最优步骤。dfs深度优先搜索,优先向深度寻找,没有分支后返回寻找上一个节点的其他分支直到全部搜索bfs宽度优先搜索,优先同一深度寻找,同一深度搜索完后,搜索下一个深度...原创 2022-01-19 16:29:44 · 126 阅读 · 0 评论 -
贪心算法入门
这类问题没有固定的模板,但是也有一定的套路可循,一般都要用到“排序”这类的想法,比如sort或者priority_queueint main(){ int i,n, maxw,ans=0,wei[maxn],l,r; scanf("%d%d", &n, &maxw); for (i = 0; i < n; i++) { scanf("%d", &wei[i]); } sort(wei, wei + n); l = 0; r = n - 1; whi原创 2022-01-20 17:41:54 · 203 阅读 · 0 评论 -
动态规划学习
一、每天四种情况:0、不可健身,不可比赛;1、不可健身,可比赛;2、可健身,不可比赛;3、可健身,可比赛。不能连续两天比赛或健身,可以选择比赛健身或休息,求n天最少休息天数1<=n<=100不能因为数据原因,去影响对状态的判断int dp[maxn][3];void solve(){ int n; cin >> n; memset(dp, 0x3f, sizeof(dp)); dp[0][0] = dp[0][1] = dp[0][2] = 0; for.原创 2022-03-25 18:28:23 · 764 阅读 · 0 评论 -
动态规划学习
例题一:有四个位置,从start开始走,走到end,走step步,求行走的方法数暴力递归:int process(int n, int cur, int aim, int reststep) //返回方法数{ if (reststep == 0) //base case { if (cur == aim) return 1; else return 0; } //三种情况 if (cur == 1) return process(n, 2,原创 2022-03-19 21:50:19 · 961 阅读 · 0 评论 -
线段树学习
一、维护区间最值struct node{ int l, r; ll minv;}tree[maxn << 2];ll num[maxn];inline void update(int k){ tree[k].minv = min(tree[k << 1].minv, tree[k << 1 | 1].minv);}void build(int k, int l, int r){ tree[k].r = r, tree[k].l = l; i原创 2022-03-29 19:36:26 · 566 阅读 · 0 评论 -
动态规划学习
一、从1走到n,每步消耗(i-j)^3*a[j],求最低消耗比赛时的思路:打算写个二维,然后继续优化成滚动数组正解:dp[i]存的是从第一个到第i个的最少消耗,由于三次方的缘故,当i比较大时,最优解中的两个点不可能距离过大,故可以由此优化ll a[maxn], dp[maxn], n;void solve(){ cin >> n; memset(dp, 0x3f, sizeof(dp)); dp[1] = 0; for (ll i = 1; i <=.原创 2022-03-21 11:48:41 · 991 阅读 · 0 评论