[VMware校园挑战赛-牛客挑战赛40 A] 小V和方程

小V和方程

https://ac.nowcoder.com/acm/contest/5555/A

题目描述

给定 ,

的本质不同解(可重集合)的个数。

正解

考虑把 表示成 的形式,其中 再也不能再进行拆分(没有平方因子)了。

那么 一定要是 的倍数。

现在题目就是一个划分数问题了(把 个相同的球放在 个相同的盒子内), 递推即可。

代码

#include <bits/stdc++.h>

using namespace std;

const int mod = 998244353;

const int N = 1005;

int n, m, x, y;
int f[N][N];

int main() {
    scanf("%d %d", &n, &m);
    x = 1, y = 1;
    for(int i = 2; i * i <= m; ++i) {
        if(m % i) continue;
        int cnt = 1;
        for(m /= i; m % i == 0; m /= i) ++cnt;
        for(int j = 1; j <= cnt / 2; ++j)
            x *= i;
    }
    f[0][0] = 1;
    for(int i = 1; i <= n; ++i)
        for(int j = 0; j <= x; ++j) {
            f[i][j] = (f[i - 1][j] + (j - i >= 0 ? f[i][j - i] : 0)) % mod;
        }
    printf("%d\n", f[n][x]);
    return 0;
}
全部评论
请问,f[i][j]表示啥?
点赞 回复 分享
发布于 2020-05-15 22:53

相关推荐

三题看不懂四题不明白二题无法AC&nbsp;T=int(input())&nbsp;for&nbsp;_&nbsp;in&nbsp;range(T):&nbsp;n=int(input())&nbsp;s=input().split()&nbsp;k,mx=1,1&nbsp;for&nbsp;i&nbsp;in&nbsp;range(len(s)-1):&nbsp;if&nbsp;len(s[i])&lt;len(s[i+1]):&nbsp;k+=1&nbsp;elif&nbsp;len(s[i])==len(s[i+1]):&nbsp;if&nbsp;s[i]&lt;=s[i+1]:&nbsp;k+=1&nbsp;...
恭喜臭臭猴子:第二题用栈就行。合法的括号直接出栈了,剩下的是不合法的,肯定都得一个一个走。出入栈的过程中得记下进栈的括号的下标。最后栈里剩下的括号如果相邻两个的下标不连续,说明它们中间有一个合法的括号序列被出栈,结果加一
投递拼多多集团-PDD等公司10个岗位 > 拼多多求职进展汇总 笔试
点赞 评论 收藏
分享
头像
03-20 22:00
重庆大学 Java
适彼乐土:“他们不行再找你” 最后的底牌吗?有点意思
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务