AGC046C
这是一种 dp 状态不那么抽象的组合数做法。但是很复杂,仅供参考。
经过思考后发现,我们可以将字符串串按零的位置割开并分成若干个子串,设
具体应该怎么做的?容易想到一个不管重复的 dp,也就是记 6 2
,5 3
,现在考虑加一个 7 2
和 6 3
,当我们加到第二个数时,可以得到 6 3
,5 4
,很遗憾,又有重复情况出现,考虑继续增添限制。观察这个过程,我们如果在一个方案中,先加完需要增加的第一个,再加需要增加的第二个,然后第一个就不再去管了,于是这个做法就不会被操作顺序等影响了,这样就可以进行一个 dp,记
我们将只能被加的位叫做接收位,只能减的位叫做输出位。
第一个转移表示让当前这一位作为接收位。
第二个转移就有点复杂了,首先这个是这一位作为输出位的转移,
因为 所以直接过了。
代码:
#include <bits/stdc++.h>
#define int long long
#define rep(i, l, r) for (int i = l; i <= r; ++ i)
#define rrp(i, l, r) for (int i = r; i >= l; -- i)
#define pii pair <int, int>
#define eb emplace_back
#define inf 1000000000
#define linf 1000000000000000000
using namespace std;
typedef long long ll;
constexpr int N = 305, P = 998244353;
inline int rd ()
{
int x = 0, f = 1;
char ch = getchar ();
while (! isdigit (ch))
{
if (ch == '-') f = -1;
ch = getchar ();
}
while (isdigit (ch))
{
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar ();
}
return x * f;
}
void add (int &x, int y)
{
(x += y) >= P && (x -= P);
}
char s[N];
int m;
int f[2][N][N];
int a[N];
int C[N << 1][N << 1];
signed main ()
{
// freopen ("1.in", "r", stdin);
// freopen ("1.out", "w", stdout);
C[0][0] = 1;
rep (i, 1, 600) rep (j, 0, i) C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % P;
scanf ("%s", s + 1); m = rd ();
int n = strlen (s + 1); s[++ n] = '0';
m = min (m, n); int cnt = 0, tot = 0, sum = 0;
rep (i, 1, n) if (s[i] == '0') a[++ tot] = cnt, cnt = 0; else ++ cnt, ++ sum;
int p = 0; f[0][0][0] = 1;
rep (i, 1, tot)
{
int v = ! p; rep (j, 0, i) rep (k, 0, m)
{ if (j) f[v][j][k] = f[p][j - 1][k];
rep (l, 0, j - 1)
rep (o, 1, min (k, a[i]))
add (f[v][j - l][k], f[p][j][k - o] * C[o + l - 1][l] % P);
} memset (f[p], 0, sizeof f[p]);
}
int ret = 0; rep (i, 0, tot) rep (j, 0, m)
add (ret, f[p][i][j]); printf ("%lld\n", ret);
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤