随笔分类 - acwing
冲!多多学习!
摘要:一个正整数 nn 可以表示成若干个正整数之和,形如:n=n1+n2+…+nkn=n1+n2+…+nk,其中 n1≥n2≥…≥nk,k≥1n1≥n2≥…≥nk,k≥1。 我们将这样的一种表示称为正整数 nn 的一种划分。 现在给定一个正整数 nn,请你求出 nn 共有多少种不同的划分方法。 输入格式
阅读全文
摘要:给定一个正整数 nn,请你求出 1∼n1∼n 中质数的个数。 输入格式 共一行,包含整数 nn。 输出格式 共一行,包含一个整数,表示 1∼n1∼n 中质数的个数。 数据范围 1≤n≤1061≤n≤106 输入样例: 8 输出样例: 4 素数:只有1和本身的因子成为素数,也称质数 求素数的一种方法试
阅读全文
摘要:hhhh,说来真惭愧 十分惭愧 特别惭愧 质因数分解我居然才学....脸红了一大截....我也是真牛逼了,才学质因数分解....hhh 学完再检讨,现在先看题...: 先解释一下吧:质因数:质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。 除了1以外,两个没有其他共同质因子的正整数称为互
阅读全文
摘要:设有 NN 堆石子排成一排,其编号为 1,2,3,…,N1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 NN 堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价
阅读全文
摘要:这两天玩疯了....之前学过了忘了不少,又捡起来重新复习... 废话不说了,上题 给定两个字符串 AA 和 BB,现在要将 AA 经过若干操作变为 BB,可进行的操作有: 删除–将字符串 AA 中的某个字符删除。 插入–在字符串 AA 的某个位置插入某个字符。 替换–将字符串 AA 中的某个字符替换
阅读全文
摘要:给定两个长度分别为 NN 和 MM 的字符串 AA 和 BB,求既是 AA 的子序列又是 BB 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 NN 和 MM。 第二行包含一个长度为 NN 的字符串,表示字符串 AA。 第三行包含一个长度为 MM 的字符串,表示字符串 BB。 字符串
阅读全文
摘要:这个也是dp的经典题目 首先弄清楚,这个子序列不一定非要是连续的,可以是跳跃的 上题先: 给定一个长度为 NN 的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数 NN。 第二行包含 NN 个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤
阅读全文
摘要:一个很经典的题目了,以前没有学过dp感觉写的不明所以然,现在我觉得懂了吧... 闫式分析法我觉得我用的很奇怪,具体奇怪在哪我也说不上来,但我自己习惯于一种思考方式: 先上题目吧: 给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,
阅读全文
摘要:有 NN 组物品和一个容量是 VV 的背包。 每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vijvij,价值是 wijwij,其中 ii 是组号,jj 是组内编号。 求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行有两个整数
阅读全文
摘要:多重背包Ⅱ其实就是数据范围扩大了,不能写像昨天y总三层循环的那样了 然后然后然后新的做法似曾相识,嘿嘿嘿。这不就是我喜欢的简单粗暴的拆成01背包的那种做法吗 不过啦,数据范围是1000,那么简单粗暴行不通,必超时,所以在那个基础上进行二进制优化 哈哈哈,二进制优化真简单,一看就懂~(吹牛逼的) 反之
阅读全文
摘要:多重背包,,嗯???怎么和完全背包那么像??? 完全一个物品可以选k次,完全有限次的(s+1次选法),就是这个这个区别么??? 可能不是一样的吧?我的原理好像弄的不是很清楚,知道看到了这位大佬发的: **************************************************
阅读全文
摘要:完全背包是01背包的一个拓展??? 其实要没有完全背包,01背包我还没有注意到物品只能选一次。。。。 根据闫式分析法,01背包可以划分为两个集合选与不选 而完全背包不可以,那比如你这次选了,下一次又不选了,或者反之那都不行 所以完全背包是分为若干个集合,分别代表着第i个物品选0次,1次,2次...k
阅读全文
摘要:滑动窗口是单调队列的典型应用,其实和单调栈差不多啦,大同小异仅此而已 给定一个大小为 n≤106n≤106 的数组。 有一个大小为 kk 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 kk 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为 [1 3 -1 -3
阅读全文
摘要:这两天的upc被虐的很惨,动态规划,搜索都没接触过,现在学数据结构,没办法了,双管齐下吧,Orz! 01背包: 有 NN 件物品和一个容量是 VV 的背包。每件物品只能使用一次。 第 ii 件物品的体积是 vivi,价值是 wiwi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总
阅读全文
摘要:用栈模拟队列 本来想偷个懒...跳过去,结果学到后面发现跳不过去了...hhh 又回过头来看一遍 //用数组模拟队列 int q[N],hh,tt=-1;//hh是队头,tt是队尾,初始值为-1,栈的初始值为0,两者有些差别 //从队尾入队列,从队头出队列 //入队 q[++tt]=x; //出队
阅读全文
摘要:单调栈y总是用数组来模拟栈,据说这样比STL的效率高,但之前栈的板子都写了每一步操作的意思,在单调栈里面我还在纠结下标等等的一些问题... 实际上不用哈; 单调栈主要的应用是找出一段序列里面的任意一个数的左边离它最近小于这个数的数字 怎么说呢 单调栈本质的操作就是,如果栈不空,且满足条件那一定就是栈
阅读全文
摘要:学到栈了..先放一下模板吧!这个使用数组来模拟栈,STL不得不说真心好用啊,hhh! #include<iostream> using namespace std; const int N=10010; int stk[N],tt;//tt表示栈顶下标 //插入 stk[++tt]=x; //删除
阅读全文
摘要:双链表和单链表其实大同小异,单链表原理知道之后,双链表知道结构可以直接写出来,upupup! //双链表板子 const int N=100010; int l[N],r[N],e[N];//l表示左边的点,r表示右边的点,e表示当前点 int idx; //初始化 void init(){ //0
阅读全文
摘要:这两天开数据结构了,有点开心hhhh,废话不多说,直接开题: 每一步的操作要知道,现在一步步来: head—>o—>o—>o—>o—-1; 单链表每个o存储两个值,一个是存储现在的值,还有个是指向下一个位置的指针,再设置一个变量idx动态分配。 //单链表: int head,idx; const
阅读全文
摘要:这个方法怎么感觉和我一开始自己写的有点像,但我那时思路不明朗,不清晰,总是错 先上题: 给定一个长度为 nn 的整数序列 a1,a2,…,ana1,a2,…,an 以及一个长度为 mm 的整数序列 b1,b2,…,bmb1,b2,…,bm。 请你判断 aa 序列是否为 bb 序列的子序列。 子序列指
阅读全文