首页 > 其他分享 >提高组专题 dp4

提高组专题 dp4

时间:2024-10-23 08:52:08浏览次数:6  
标签:dp4 int 提高 times ch 专题 &+ ll dp

A [PA2021] Od deski do deski

DP 挺显然的,但我推错了……。

\[\begin{split} dp_{i+1,j,1}&+=\sum(dp_{i,j,1}+dp_{i,j,0}) \times j\\ dp_{i+1,j+1,0}&+=\sum dp_{i,j,1}\times (m-j)\\ dp_{i+1,j,0}&+=\sum dp_{i,j,0}\times (m-j) \end{split} \]

#include<bits/stdc++.h>
using namespace std;
constexpr int M = 1e9 + 7;
#define ll long long
int dp[3010][3010][2], n, m, ans;
int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin>>n>>m; dp[0][0][0] = dp[0][0][1] = 1;
	for(int i=0; i<n; ++i) for(int j=0; j<=min(n, m); ++j){
		dp[i+1][j][1] = ((ll)dp[i+1][j][1] + (ll)dp[i][j][1] * j % M + (ll)dp[i][j][0] * j % M) % M;
		dp[i+1][j+1][0] = ((ll)dp[i+1][j+1][0] + (ll)dp[i][j][1] * (m - j) % M) % M;
		dp[i+1][j][0] = ((ll)dp[i+1][j][0] + (ll)dp[i][j][0] * (m-j) % M) % M;
	} for(int i=1; i<=n; ++i) ans = ((ll)ans + (ll)dp[n][i][1]) % M;
	return cout<<ans, 0;
}

B [TJOI2019] 甲苯先生的字符串

DP是显然的,矩乘加速也是显然的。

#include<bits/stdc++.h>
using namespace std;
#define f(i) for(int i=0; i<26; ++i)
#define ll long long
constexpr int M = 1e9 + 7;
ll n; int sum; string s;
struct Matrix{ int m[26][26]; }trl, ans;
Matrix operator * (const Matrix a, const Matrix b){
	Matrix c; memset(c.m, 0, sizeof(c.m));
	f(i) f(j) f(k) c.m[i][j] = ((ll)c.m[i][j] + (ll)a.m[i][k] * b.m[k][j] % M) % M;
	return c;
}
int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin>>n>>s; int len = s.size();
	f(i) f(j) trl.m[i][j] = 1;
	for(int i=1; i<len; ++i)
		trl.m[s[i-1] - 'a'][s[i] - 'a'] = 0;
	f(i) ans.m[0][i] = 1; --n;
	while(n){
		if(n & 1) ans = ans * trl;
		trl = trl * trl; n >>= 1;
	}
	f(i) sum = ((ll)sum + (ll)ans.m[0][i]) % M;
	return cout<<sum, 0;
}

C [ABC213G] Connectivity 2

算是比较经典的图上容斥了吧。上次模拟赛还遇到过。令 \(g(S)\) 表示点集为 \(S\) 的图的个数,\(f(S)\) 表示点集为 \(S\) 的联通子图个数。答案可以是一部分图和一部分非连通图构成,所以答案是 \(f * g\) 的一个形式的加和。考虑如何递推求解 \(f,g\)。因为 \(g(S)\) 表示图的个数,因此我们只关心这些点内部的边的选择情况如何,每个边都有选和不选两种情况,于是方案数为 \(2^{cnt}\)。对于 \(f(S)\),可以用全部情况减去所有非法情况组成,非法情况的不联通图一定是一部分连通图和一部分非连通图构成,所以在 \(S\) 钦定一点 \(u\) 使得枚举的连通图 \(f(V)\) 有 \(u\in V\),再乘上相应的 \(V\) 在 \(S\) 的补即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
constexpr int M = 998244353;
int n, m, p[205], flag[18], tot, g[1<<18], f[1<<18], ans[18];
int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	p[0] = 1; for(int i=1; i<=200; ++i) p[i] = (ll)p[i-1] * 2 % M;
	cin>>n>>m; tot = (1 << n) - 1;
	for(int i=1, u, v; i<=m; ++i){
		cin>>u>>v;
		flag[u] |= 1 << (v-1);
		flag[v] |= 1 << (u-1);
	}
	for(int s=0; s<=tot; ++s){
		for(int i=1; i<=n; ++i) if(!(s & (1<<(i-1)))){
			int tmp = s | (1 << (i-1));
			g[tmp] = g[s] + __builtin_popcount(flag[i] & s);
		}
	}
	for(int s=0; s<=tot; ++s) g[s] = p[g[s]];
	for(int s=0; s<=tot; ++s){
		int i = s & (-s), res = 0;
		for(int tmp=(s-1)&s; tmp; tmp=(tmp-1)&s) if(tmp & i)
			res = ((ll)res + (ll)f[tmp] * g[tmp^s] % M) % M;
		f[s] = (((ll)g[s] - (ll)res) % M + M) % M;
	}
	for(int s=0; s<=tot; ++s) if(s & 1){
		int res = (ll)f[s] * g[tot^s] % M;
		for(int i=1; i<=n; ++i) if(s & (1<<(i-1))){
			ans[i] = ((ll)ans[i] + (ll)res) % M;
		}
	}
	for(int i=2; i<=n; ++i) cout<<ans[i]<<'\n';
	return 0;
}

D 某位歌姬的故事

区间问题肯定要考虑重叠,对于重叠来说有个很显然的性质就是:如果一段区间被很多个限制覆盖,那么只考虑限制中最小的那个。对于计算方案数来说,只需要很简单的容斥即可:\(m^{len}-(m-1)^{len}\)。然后DP就行了。DP是 stj 的。

#include<bits/stdc++.h>
using namespace std;
constexpr int B = 1 << 13;
char buf[B], *p1 = buf, *p2 = buf, obuf[B], *O = obuf;
#define gt() (p1==p2 && (p2=(p1=buf)+fread(buf, 1, B, stdin), p1==p2) ? EOF : *p1++)
template <typename T> inline void rd(T &x){
	x = 0; int f = 0; char ch = gt();
	for(; !isdigit(ch); ch = gt()) f ^= ch == '-';
	for(; isdigit(ch); ch = gt()) x = (x<<1) + (x<<3) + (ch^48);
	x = f ? -x : x;
}
#define pt(ch) (O-obuf==B && (fwrite(obuf, 1, B, stdout), O=obuf), *O++ = (ch))
template <typename T> inline void wt(T x){
	if(x < 0) pt('-'), x = -x;
	if(x > 9) wt(x / 10); pt(x % 10 ^ 48);
}
#define fw fwrite(obuf, 1, O - obuf, stdout)
#define ll long long
constexpr int M = 998244353;
int T, n, q, A, ls[1005], cnt, nd[1005], lim[1005], h[505], Long[1005], ans, pos[1005], mn[1005], dp[1005][1005];
struct Que{ int l, r, m; }Q[505];
struct Seg{ int l, r, m; }S[505];
inline int qpow(int a, int k){
	int ans = 1; while(k){
		if(k & 1) ans = (ll)ans * a % M;
		a = (ll)a * a % M; k >>= 1;
	} return ans;
}
inline void work(){
	ans = 1, cnt = 0;
	rd(n), rd(q), rd(A);
	for(int i=1; i<=q; ++i){
		rd(Q[i].l), rd(Q[i].r), rd(Q[i].m);
		ls[++cnt] = Q[i].l-1; ls[++cnt] = Q[i].r;
		h[i] = Q[i].m;
	}
	ls[++cnt] = 0, ls[++cnt] = n;
	sort(ls+1, ls+1+cnt); int len = unique(ls+1, ls+1+cnt) - ls - 1;
	for(int i=1; i<=len; ++i) lim[i] = A + 1;
	for(int i=1; i<=q; ++i){
		Q[i].l = lower_bound(ls+1, ls+1+len, Q[i].l-1) - ls;
		Q[i].r = lower_bound(ls+1, ls+1+len, Q[i].r) - ls;
		for(int j=Q[i].l; j<Q[i].r; ++j) lim[j] = min(lim[j], Q[i].m);
	}
	for(int i=1; i<=q; ++i){
		int mx = 0;
		for(int j=Q[i].l; j<Q[i].r; ++j) mx = max(mx, lim[j]);
		if(mx < Q[i].m) return pt('0'), pt('\n'), void();
	}
	sort(h+1, h+1+q); int num = unique(h+1, h+1+q) - h - 1;
	for(int i=1; i<=num; ++i){
		memset(mn, 0, sizeof(mn));
		int tmp = 0;
		for(int j=1; j<len; ++j){
			if(lim[j] == h[i]){
				Long[++tmp] = ls[j+1] - ls[j];
				pos[tmp] = j + 1;
			}
		}
		for(int j=1; j<=q; ++j){
			if(Q[j].m == h[i]){
				int po = upper_bound(pos+1, pos+1+tmp, Q[j].r) - pos - 1;
				mn[po] = max(mn[po], Q[j].l + 1);
			}
		}
		for(int j=0; j<=tmp; ++j) for(int k=0; k<=tmp; ++k) dp[j][k] = 0;
		dp[0][0] = 1;
		for(int r=1; r<=tmp; ++r){
			int tot = 0, sum = qpow(h[i]-1, Long[r]);
			for(int s=0; s<r; ++s){
				if(!dp[r-1][s]) continue;
				tot = ((ll)tot + (ll)dp[r-1][s]) % M;
				if(mn[r] > pos[s]) continue;
				dp[r][s] = ((ll)dp[r][s] + (ll)dp[r-1][s] * sum % M) % M;
			}
			dp[r][r] = (ll)(((ll)qpow(h[i], Long[r]) - (ll)sum) % M + M) % M * tot % M;
		}
		int res = 0;
		for(int j=0; j<=tmp; ++j) res = ((ll)res + (ll)dp[tmp][j]) % M;
		ans = (ll)ans * res % M;
	}
	for(int i=1; i<len; ++i) if(lim[i] == A+1)
		ans = (ll)ans * qpow(A, ls[i+1]-ls[i]) % M;
	wt(ans); pt('\n');
}
int main(){
	rd(T); while(T--) work();
	return fw, 0;
}

E [ABC134F] Permutation Oddness

很神仙的 DP 思路。不是入能想出来的。考虑什么时候选的数对怪异度有贡献,以及贡献多少,因为是带绝对值的,所以当大的数 \(i\) 对小的位置的时候,贡献的怪异度为 \(+i\),当小的数对大的位置的时候,贡献的怪异度为 \(-i\)。由此令 \(f_{i,j,k}\) 表示当前选到第 \(i\) 个数/位置,前面有 \(j\) 个数匹配到比自己大的位置,当前的怪异度为 \(k\)。那么有:

\[\begin{split} f_{i,j,k}&=f_{i-1,j,k}\\ &+f_{i-1,j+1,k-2*i}*(j+1)^2\\ &+f_{i-1.j-1.k+2*i}\\ &+f_{i-1,j,k}*j \end{split} \]

\(\mathcal{O}(N^4)\) 转移即可。

#include<bits/stdc++.h>
constexpr int M = 1e9 + 7;
#define ll long long
int n, k, f[55][55][55*55*2];
int main(){
	scanf("%d%d", &n, &k);
	if(k == 0) return printf("1"), 0;
	f[0][0][n*n] = 1; int tot = n*n;
	for(int i=1; i<=n; ++i){
		for(int j=0; j<=n; ++j){
			for(int m=-tot; m<=tot; ++m){
				f[i][j][m + tot] = ((ll)f[i][j][m + tot] + (ll)f[i-1][j][m + tot]) % M;
				if(m + 2*i <= tot && j) f[i][j][m + tot] = ((ll)f[i][j][m + tot] + (ll)f[i-1][j-1][m + 2*i + tot]) % M;
				if(m - 2*i + tot >= 0) f[i][j][m + tot] = ((ll)f[i][j][m + tot] + (ll)f[i-1][j+1][m - 2*i + tot] * (j+1) % M * (j+1) % M) % M;
				f[i][j][m + tot] = ((ll)f[i][j][m + tot] + (ll)f[i-1][j][m + tot] * j % M * 2 % M) % M;
			}
		}
	} return printf("%d", f[n][0][k + tot]), 0;
}

F [JSOI2018] 潜入行动

属于一眼出 背包DP 了吧~状态也很好弄。令 \(f_{u,k,0/1/2/3}\) 表示节点 \(u\) 子树内有 \(k\) 个监听器的状态,定义如下:

\[\left\{\begin{matrix} \text{放} \left\{\begin{matrix} \text{被看}\Rightarrow 3\\ \text{不被看}\Rightarrow 2 \end{matrix}\right.\\ \text{不放} \left\{\begin{matrix} \text{被看}\Rightarrow 1\\ \text{不被看} \Rightarrow 0 \end{matrix}\right. \end{matrix}\right. \]

那么状态 \(0\) 的转移很好搞,\(u\) 的儿子都必须不放且被看(\(1\)),那么有:

\[f_{u,k_u,0}=\prod_{v\in son_u}f_{v,k_v,1}\ \ \ k_u=\sum_{v\in son_u}k_v \]

对于状态 \(1\),能够提供贡献的儿子状态仅为 \(1,3\),并且儿子里至少有一个有监听器(\(3\))。看样子很难弄,不过因为背包转移的时候是一个儿子一个儿子地合并起来的,所以维护辅助背包 \(g_{z,0/1,k}\) 表示已经合并的 \(z\) 个儿子里是否有状态 \(3\),那么有:

\[\left\{\begin{matrix} g_{z,0,k_z}&=g_{z-1,0,k_z-k_v}\times f_{v,1,k_v}\\ g_{z,1,k_z}&=g_{z-1,0,k_z-k_v}\times f_{v,3,k_v}\\ &+g_{z-1,1,k_z-k_v}\times f_{v,1,k_v}\\ &+g_{z-1,1,k_z-k_v}\times f_{v,3,k_v} \end{matrix}\right. \]

状态 \(2\) 的转移也很好搞,\(u\) 的儿子都必须不放,所以可以是 \(0,1\) 两种,直接大力背包即可:

\[\left\{\begin{matrix} f_{u,k_u,2}=f_{u,k_u-k_v,2}\times f_{v,k_v,0}\\ f_{u,k_u,2}=f_{u,k_u-k_v,2}\times f_{v,k_v,1} \end{matrix}\right. \]

状态 \(3\) 的转移和状态 \(1\) 差不多,儿子的状态四种都是可以的,但是儿子里必须有一个是 \(2\) 或 \(3\)。还是用一个辅助背包 \(g_{z,0/1,k}\) 表示已经合并的儿子里有没有 \(2\) 或 \(3\),那么有:

\[\left\{\begin{matrix} g_{z,0,k_z}&=g_{z-1,0,k_z-k_v}\times f_{v,0,k_v}\\ &+g_{z-1,0,k_z-k_v}\times f_{v,1,k_v}\\ g_{z,1,k_z}&=g_{z-1,0,k_z-k_v}\times f_{v,2,k_v}\\ &+g_{z-1,0,k_z-k_v}\times f_{v,3,k_v}\\ &+g_{z-1,1,k_z-k_v}\times f_{v,0,k_v}\\ &+g_{z-1,1,k_z-k_v}\times f_{v,1,k_v}\\ &+g_{z-1,1,k_z-k_v}\times f_{v,2,k_v}\\ &+g_{z-1,1,k_z-k_v}\times f_{v,3,k_v}\\ \end{matrix}\right. \]

答案即为 \(f_{root,k,1}+f_{foot,k,3}\)。上述仅供参考,请以代码为准。

#include<bits/stdc++.h>
using namespace std;
constexpr int B = 1 << 20;
char buf[B], *p1 = buf, *p2 = buf, obuf[B], *O = obuf;
#define gt() (p1==p2 && (p2=(p1=buf)+fread(buf, 1, B, stdin), p1==p2) ? EOF : *p1++)
template <typename T> inline void rd(T &x){
	x = 0; int f = 0; char ch = gt();
	for(; !isdigit(ch); ch = gt()) f ^= ch == '-';
	for(; isdigit(ch); ch = gt()) x = (x<<1) + (x<<3) + (ch^48);
	x = f ? -x : x;
}
#define pt(ch) (O-obuf==B && (fwrite(obuf, 1, B, stdout), O=obuf), *O++ = (ch))
template <typename T> inline void wt(T x){
	if(x < 0) pt('-'), x = -x;
	if(x > 9) wt(x / 10); pt(x % 10 ^ 48);
}
#define fw fwrite(obuf, 1, O - obuf, stdout)
#define ll long long
constexpr int N = 1e5 + 5, M = 1e9 + 7;
int n, k, f[N][4][105], g[N][2][105], siz[N], tmp[4][105];
vector<int> G[N];
inline int add(int a, int b){ return a + b > M ? a + b - M : a + b; }
inline int mul(int a, int b){ return (ll)a * b % M; }
inline void lets_go(int u, int fa){
	siz[u] = 1; f[u][0][0] = f[u][2][1] = 1;
	for(int v : G[u]) if(v ^ fa){
		lets_go(v, u); 
		int mnu = min(siz[u], k);
		for(int i=0; i<4; ++i) for(int j=0; j<=mnu; ++j)
			tmp[i][j] = f[u][i][j], f[u][i][j] = 0;
		for(int z=mnu;z>=0; --z){
			for(int j=0; j<=min(siz[v],k-z); ++j){
				f[u][0][z+j] = add(f[u][0][z+j], mul(tmp[0][z], f[v][1][j]));
				f[u][1][z+j] = add(f[u][1][z+j], mul(tmp[0][z], f[v][3][j]));
				f[u][1][z+j] = add(f[u][1][z+j], mul(tmp[1][z], f[v][1][j]));
				f[u][1][z+j] = add(f[u][1][z+j], mul(tmp[1][z], f[v][3][j]));
				f[u][2][z+j] = add(f[u][2][z+j], mul(tmp[2][z], f[v][0][j]));
				f[u][2][z+j] = add(f[u][2][z+j], mul(tmp[2][z], f[v][1][j]));
				f[u][3][z+j] = add(f[u][3][z+j], mul(tmp[2][z], f[v][2][j]));
				f[u][3][z+j] = add(f[u][3][z+j], mul(tmp[2][z], f[v][3][j]));
				f[u][3][z+j] = add(f[u][3][z+j], mul(tmp[3][z], f[v][0][j]));
				f[u][3][z+j] = add(f[u][3][z+j], mul(tmp[3][z], f[v][1][j]));
				f[u][3][z+j] = add(f[u][3][z+j], mul(tmp[3][z], f[v][2][j]));
				f[u][3][z+j] = add(f[u][3][z+j], mul(tmp[3][z], f[v][3][j]));
			}
		} siz[u] += siz[v];
	}
}
int main(){
	rd(n), rd(k);
	for(int i=1, u, v; i<n; ++i){
		rd(u), rd(v);
		G[u].emplace_back(v);
		G[v].emplace_back(u);
	} lets_go(1, 0);
	
	int ans = ((ll)f[1][1][k] + (ll)f[1][3][k]) % M;
	wt(ans); return fw, 0;
}

G [[TJOI2018] 游园会]([P4590 TJOI2018] 游园会 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))

dp of dp。名字挺高级。

对于这道题来说,我们需要构造一个字符串 \(S\) 使得:

  • 长度为 \(n\),且仅有 N,O,I 三种字符:这个限制很好满足啊,每次往后添一个字符即可。

  • 不包含 NOI 子串:也很好满足啊,开个状态 0/1/2 表示当前匹配到了那一位,决定下一位要不要填 I 即可。

  • 与题目给的模式串 \(str\) 的最长公共子序列长度为 \(0\sim k\):这个限制是不好满足的。但是如果只求最长共同子序列是简单的:

    \[dp_{i,j}=max(dp_{i-1,j},dp_{i,j-1},dp_{i-1,j-1}+(A_i==b_j)) \]

    想办法结合起来。可以发现的是,对于 \(dp_{1\sim i,j}\) 每一位最多差 \(1\),那么就可以差分一下,然后状压存到 dp状态里,然后每次添加一个字符的时候,就将旧的状态解包,然后更新新的状态并压到 dp里去。

#include<bits/stdc++.h>
using namespace std;
constexpr int N = 1e3 + 5, B = (1<<15) + 1, M = 1e9 + 7;
int n, k, dp[2][B][3], tot, lst, now, f2[16], f1[16], ans[16];
string str;
inline int add(initializer_list<int> Add){
	int res = 0;
	for(int v : Add) res = res + v > M ? res + v - M : res + v;
	return res;
}
inline void dhsh(int* a, int s){
	for(int i=0; i<k; ++i) a[i+1] = !!(s & (1<<i));
	for(int i=1; i<=k; ++i) a[i] += a[i-1];
}
inline int hsh(int *a){
	int s = 0;
	for(int i=0; i<k; ++i) s |= (a[i+1]-a[i]) << i;
	return s;
}
inline void DP(int s, int typ2, char ch, int typ1){
	dhsh(f1, s);
	for(int i=1; i<=k; ++i) f2[i] = max({f2[i-1], f1[i], f1[i-1] + (ch == str[i-1])});
	int s2 = hsh(f2); dp[now][s2][typ2] = add({dp[now][s2][typ2], dp[lst][s][typ1]});
}
int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin>>n>>k>>str; tot = (1 << k) - 1;
	dp[0][0][0] = 1;
	for(int i=0; i<n; ++i){
		lst = i & 1, now = (~i) & 1;
		for(int j=0; j<=tot; ++j)
			dp[now][j][0] = dp[now][j][1] = dp[now][j][2] = 0;
		for(int j=0; j<=tot; ++j){
			if(dp[lst][j][0]){
				DP(j, 1, 'N', 0);
				DP(j, 0, 'O', 0);
				DP(j, 0, 'I', 0);
			}
			if(dp[lst][j][1]){
				DP(j, 1, 'N', 1);
				DP(j, 2, 'O', 1);
				DP(j, 0, 'I', 1);
			}
			if(dp[lst][j][2]){
				DP(j, 1, 'N', 2);
				DP(j, 0, 'O', 2);
			}
		}
	}
	for(int i=0; i<=tot; ++i){
		int cnt = __builtin_popcount(i);
		ans[cnt] = add({ans[cnt], dp[now][i][0], dp[now][i][1], dp[now][i][2]});
	}
	for(int i=0; i<=k; ++i) cout<<ans[i]<<'\n';
	return 0;
}

标签:dp4,int,提高,times,ch,专题,&+,ll,dp
From: https://www.cnblogs.com/xiaolemc/p/18494321

相关文章

  • 考公刷题,如何才能做到有效提高?
    在这个“不拼爹”的时代里,考公务员成了不少小伙伴们的首选。但是,要想在这条路上走得稳当,可不是一件容易的事儿。如何通过刷题来提升自己的竞争力呢?我们就来说说那些能让你刷题效率翻倍的小技巧吧!1.制定合理的学习计划刷题不是漫无目的地做题,而是要有计划地进行。想象一下,如......
  • Android13冻结进程分析:如何提高设备性能和用户体验
    本文介绍了Android13中的冻结进程功能,它是一种重要的资源管理策略,可以提高系统性能和稳定性,同时最大限度地节省设备的资源和电池消耗。文章讨论了如何合理分配资源,包括CPU、内存等,以提高设备性能和用户体验。此外,文章还提到了冻结进程对应用程序线程的影响,并介绍了Android13与An......
  • 程序员必备!推荐一款 windows 上的白噪音工具,提高专注效率,非常好用(带私活源码)
    今天给大家分享一款windows上的白噪音工具。安装、使用均非常方便。一、介绍Ambie是一款播放白噪声和自然声音的应用程序,可帮助您集中注意力、睡眠和放松。简洁易用的界面:Ambie的界面设计简洁、易用,用户可以轻松地浏览和选择自己喜欢的音乐,还可以自定义播放列表和设......
  • 「Day-4 提高笔记-LCA最近公共祖先」
    #include<iostream>usingnamespacestd;constintMAXN=5*1e5+5;structnode{ intto,next;}e[MAXN*2];intf[MAXN][20],dp[MAXN];//f[x][i]表示x的第2^i个节点的编号inth[MAXN*2],tot=0;intn,m,s;voidadd(intx,inty){ e[++tot]={y,h[x]}; h......
  • .NET 8 Web API从基础到提高全面示例
    .NET8WebAPI从基础到提高全面示例 概述:1.设置.NET8WebAPI项目概念使用.NETCLI创建新的WebAPI项目。这设置了一个基本的项目结构,包括启动和WeatherForecast控制器作为示例。Program.cs代码示例dotnetnewwebapi-nMyWebApi2.Program.cs—最低限度的API......
  • 梦熊提高组第 4 场
    P11217【MX-S4-T1】「yyOIR2」youyou的垃圾桶每次把\([l,r]\)的所有数\(+d\),求最多的攻击次数。sol1(赛时思路)用线段树维护,然后二分枚举也可以全部攻击的次数,再在线段树上二分。如果左子树的大小超过\(k\),则在左子树查找否则在右子树查询\(k-sum_{左子树}\)......
  • 如何快速安装和配置Linux下 Anaconda 以提高开发效率
    1.下载Linux版Anaconda前往Anaconda下载页面,选择合适的版本下载。2.安装Anaconda进入下载的Anaconda目录并运行安装脚本:cd/path/to/conda-directorybashAnaconda3-2024.06-1-Linux-x86_64.sh3.重新加载配置安装完成后,重新加载配置文件以便命令生效:source~/......
  • 在K8S中,有一种情况,即公司希望通过维持最低成本来提高其效率和技术运营速度。你认为公
    在Kubernetes(K8s)环境中,公司若希望通过维持最低成本来提高其效率和技术运营速度,可以采取一系列策略。以下是一些详细建议:1.优化资源配置与利用设置资源请求与限制:为容器设置合理的资源请求(Requests)和限制(Limits),确保它们在不浪费资源的同时获得必要的计算资源。这有助于防止......
  • Hugging Face 与 Wiz Research 合作提高人工智能安全性
    本文首发于2024年5月我们很高兴地宣布,我们正在与Wiz合作,目标是提高我们平台和整个AI/ML生态系统的安全性。Wiz研究人员与HuggingFace就我们平台的安全性进行合作并分享了他们的发现。Wiz是一家云安全公司,帮助客户以安全的方式构建和维护软件。随着这项研究的发......
  • 算法专题九: 哈希表与字符串
    目录哈希表1.两数之和2.判断是否为字符重拍排3.是否存在重复元素4.存在重复元素Ⅱ5.字母异位词分组字符串1.最长公共前缀2.最长回文子串3.二进制求和4.字符串相乘哈希表1.两数之和固定一个数,找前面有没有target-x这个数,使用哈希表,每次查找之后......