11 2021 档案
摘要:字符数组初始化字符串会默认添加\0,要注意数组下标大小例如 char a[]="123",要开到4;C数组 int a[]不能拷贝和赋值;如a2=a,int a2[]=a //错误int *a[10] //a是指向10个int *int (*a)[10] //指向10个int型的数组指针int a[
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 int dp[205][5050]; 4 int v[205],w[205]; 5 int n,k; 6 int main() 7 { 8 //cout<< log(1e18)/log(5)<<en
阅读全文
摘要:分析一下,能产生0的只有2和5的因子乘积,所以尾部是0的个数取决于min(cnt(2),cnt(5));//2和5因子幂次取最小值; n个数恰好取k个使得2和5的min尽量大,这时二维状态不够,把5当做第三维 dp[i][k][c5]表示前i个数取k个,5的幂为c5时2的幂的最大值,答案就是dp[i
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 LL n,m,k; 5 int check(LL x) 6 { 7 LL s=0,j=m; 8 for(LL i=1;i<=n;i++) 9 { 10
阅读全文
摘要:1 typedef pair<int,int> pii; 2 const int N=1e5+5; 3 class Solution { 4 public: 5 struct cmp{ 6 bool operator()(pii &a, pii &b) 7 { 8 return a.second>b
阅读全文
摘要:0-1背包问题 dp[i][j]表示前i件物品,体积容量为j的背包所能获得的最大价值 决策是第i个物品选不选; 转移方程 dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]); n为物品数量,m为背包体积 for(int i=1;i<=n;i++) for(in
阅读全文
摘要:floyd算法复杂度是o(n^3);n为节点数 思想是dp思想,类似区间dp; f[i][j]表示节点i到节点j的最短路径和; 1.i-j可以由i直接到j 2.i-j可以经过中间节点i-k-j来更新,k相当于节点集,用换元的视角去看k; 1 for(int k=1;k<=n;k++) 2 for(i
阅读全文
摘要:偶然想起单调栈和单调队列的知识点,就想把它记录下来 单调栈和单调队列都是维护一个容器内元素的单调性/滑窗是单调队列的推广这里不细说了,会滑窗一定会单调队列 leetcode 单调栈解决第一个比当前元素大或小的问题; 单调队列主要解决区间最值问题; 239. 滑动窗口最大值 1 class Solut
阅读全文
摘要:逆序对的定义是 对于i<j;a[i]>a[j]我们称 a[i]和a[j]是一对逆序对 如何求逆序对个数,归并排序或者线段树 归并排序方法 代码都是没测试过,不知道会不会报错... 1 int a[N],b[N];//a是原数组,b是辅助数组,到时候复制回原数组 2 int ans=0; 3 void
阅读全文
摘要:最近在看树状数组和线段树,没完整看完,把目前学的暂时记录,后续再补。 线段树和树状数组都是对区间操作的数据结构 1 #define ls (x<<1) 2 #define rs (x<<1|1) 3 using namespace std; 4 const int N=1e5+5; 5 int su
阅读全文
摘要:KMP算法算是我接触的第一个字符串算法,以前不理解,现在稍微理解了,谨以此记。 KMP算法最核心的部分是NEXT数组,也就是模式串匹配的真前缀与真后缀的关系。 对于字符串"abca"的真前缀和真后缀都是a即next数组里的next[4]=1; next数组next[i]表示的是下表从1-i的真后缀等
阅读全文