- 博客(11)
- 收藏
- 关注
原创 动态规划之路
windy有 N 条木板需要被粉刷。每条木板被分为 M 个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。如果windy只能粉刷 T 次,他最多能正确粉刷多少格子?一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。
2022-11-11 16:58:32 289 1
原创 优先队列,并查集
每次输出set里的元素个数即可。把已经被确认下来的动物(已经被说过的)的三种情况放到三个集合里(这里的集合就是并查集),比如X吃Y,那么就把X是A,Y是B放到一个集合,X是B,Y是C放到一个集合,X是C,Y是A放到一个集合,然后比如X和Y同类,那么就把两个都是A,都是B,都是C放到一个集合。我们看到,如果在上一次删除时,删除其他的单元,则可以避免本次访问的缺失。如果说X和Y是同类,但是X是A,Y是B在一个集合,或者X是A,Y是C在一个集合,那么说明这是假话,X是B,C无需讨论,性质一样。...
2022-07-21 18:32:57 192
原创 栈,队列,单调栈,单调队列
经典题for循环让数字按顺序压入栈,然后里面while循环判断是否弹出栈,最后循环结束的时候看看栈是否为空,即该出栈顺序有没有问题。例题1给你一个1->n的排列和一个栈,入栈顺序给定你要在不打乱入栈顺序的情况下,对数组进行从大到小排序当无法完全排序时,请输出字典序最大的出栈序列思路观察发现,当一个数后面没有比他大的数的时候他必出栈水题牛牛喜欢跟字符串玩耍,他刚刚学会了一个新操作,将一个字符串x插入另一个字符串y中(包括放在开头和结尾)解法2。...
2022-07-17 00:31:13 192
原创 线段树与树状数组
1.模板两种操作:1.给某个数加x。2.查询区间和#include<bits/stdc++.h>using namespace std;int n,m;int a[100010];int tree[4*100010];//节点数不超过叶子的四倍void build(int p,int l,int r)//p是节点编号 { if(l==r) { tree[p]=a[l]; return; } int mid=(l+r)/2; build(p*2,l
2022-06-06 19:29:42 275 2
原创 贪心(牛客)
后缀最小值minn[i]表示i以后区间的最小值for(int i=n;i>=1;i--) minn[i]=min(minn[i+1],a[i]);前缀最小值for(int i=1;i<=n;i++) minn[i]=min(minn[i-1],a[i]);例题:给定长度为n的数列A,求出两个整数ai和aj,使得ai-aj最大且i<j;//后缀最小值for(int i=n;i>=1;i--) minn[i]=min(minn[
2022-05-14 17:40:04 300
原创 动态规划详解
01背包:f [ i ][ j ]表示前i个物品中恰好塞满 j 体积的背包的最大价值f[ i ][ j ]=max ( f[ i -1 ][ j ] , f[ i - 1][ j -a[ i ] ] + w [ i ])最原始的思路应该将f[ 0 ][ j ]全部赋值为无穷小,因此表格就变成如下:可以,发现最后答案还要枚举才能找到最大值,原因是f[ i - 1][ j -a[ i ] ]可能是负无穷,这样就会导致f[ i - 1][ j -a[ i ] ]+ w [ i ]是负无穷,..
2022-05-05 21:56:27 90
原创 天梯赛前训练-2
前三道相信大家肯定之前就做过了,所以就不放代码了。7-4 打印沙漏 (20 分)这个题就是找规律:第i行有i个空格(从0开始数),然后符号就用数组预处理一下(我喜欢先存在数组里)。两个数组,a记录每行多少个字符,sum记录上半部分共有多少个字符(不包含一个字符的那一行)。总的字符就是2*sum[k]+1;所以最后一行要输出的就是n-2*sum[k]-1。#include<bits/stdc++.h>using namespace std;int a[31];int sum[3
2022-04-05 23:01:53 812
原创 天梯赛训练-1 题解
较简单的题直接上代码不多解释7-1 日期格式化 (5 分)#include<bits/stdc++.h>using namespace std;int main(){ string s; cin>>s; for(int i=6;i<10;i++) cout<<s[i]; cout<<'-'; for(int i=0;i<=4;i++) cout<<s[i]; } 7-2 求整数段和 (10 分)
2022-04-05 13:52:49 1154
原创 CF错题集
Snacktower这道题,做了一次还一直不会。观察一下样例,会发现,他的数都是从大到小输出,用数组b[i]来判断大数出现了没,出现了就是可以输出了,所以每次就判断能不能输出就好了。#include <bits/stdc++.h>using namespace std;const int maxn = 100005;int n, a[maxn], b[maxn];int main(){ int n; cin>>n; int tmp=n; for.
2022-03-29 19:57:33 293
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人