板子专题
Chemin Du Retour
这个作者很懒,什么都没留下…
展开
-
求表达式的值
const int MAXN = 1e6 + 5; int n,m; bool f; stack<int>st1; stack<char>st2; int qpw(int a,int b){ int ans = 1; while(b){ if(b & 1){ ans*=a; } a = a*a; b >>= 1; } return ans; } int level(char x){ //返回优先级 if(x == '+'原创 2020-10-03 00:13:45 · 197 阅读 · 0 评论 -
动态规划(二)
二维费用背包 //最大 scanf("%d%d%d",&n,&V,&M); for(int i=0;i<n;i++){ int a,b,c; scanf("%d%d%d",&a,&b,&c); for(int j=V;j>=a;j--){ for(int k=M;k>=b;k--){ dp[j][k] = max(dp[j][k],dp[j-a][k-b] + c); } } } printf("%d原创 2020-09-30 14:08:52 · 55 阅读 · 0 评论 -
1.高精度
加法 //两个大数 char str1[MAXN],str2[MAXN]; int a[MAXN],b[MAXN],c[MAXN]; void add(int a[],int b[]){ if(a[0] < b[0])return add(b,a); c[0] = a[0]; for(int i=1;i<=a[0];i++){ c[i] += a[i]; if(i <= b[0])c[i] += b[i]; c[i+1] += c[i]/10; c[i] %= 10;原创 2020-09-25 00:45:54 · 59 阅读 · 0 评论 -
动态规划(一)背包
背包问题 1.01背包每种物品一个 for(int i=0;i<n;i++){ cin >> v[i] >> w[i]; } for(int i=0;i<n;i++){ for(int j=V;j>=v[i];j--){ dp[j] = max(dp[j],dp[j-v[i]]+w[i]); } } cout << dp[V] << endl; 2.完全背包问题,每种物品无限(优化) for(int i=0;i&原创 2020-09-17 22:58:03 · 143 阅读 · 1 评论 -
(2)ac自动机
模板hdu2222 //ne[i] = j 表示以i结尾的后缀(不算自己)与某个最长的前缀相等,那个最长的前缀的尾端是j; const int N = 1e4+5,S = 55,M = 1e6+5; int n; int tir[N*S][26],cnt[N*S],idx; char str[M]; int q[N*S],ne[N*S]; void insert(){ int p=0; for(int i=0;str[i];i++){ int t = str[i] - '原创 2020-09-10 17:41:23 · 71 阅读 · 0 评论 -
(1)kmp习题
模板 const int N = 10010,M = 100010; int n,m; char p[N],s[M]; //p是匹配串,s是原串 int ne[N]; void get_next(){ //p在s上的匹配数 下标从1开始 ne[1] = 0; for(int i=2,j=0;i<=lenp;i++){ while(j && p[i] != p[j+1])j = ne[j]; if(p[i] == p[j+1])j++; ne[i] =原创 2020-09-10 10:32:56 · 138 阅读 · 0 评论