文章

24

粉丝

27

获赞

126

访问

11.4k

头像
整数分解 题解:又写了一个记忆化搜索
P1967 华东师范大学2023年机试
发布于2025年3月18日 17:52
阅读数 1.2k

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1005;
int n;
int dp[N][N];
vector<int> prime;

void primes() {
    // 用欧拉筛模板,线性时间复杂度生成n以内素数表,相当于完全背包问题的物品表,区别是01背包物品只能拿一次,完全背包无限次
    vector<bool> is_prime(n+1, true);
    is_prime[0] = is_prime[1] = false;
    prime.push_back(-1); // 占位符,使素数从 prime[1] 开始
    for (int i=2; i<=n; ++i) {
        if (is_prime[i]) {
            prime.push_back(i); // 素数从 prime[1] 开始存储
        }
        // 从第2个元素(prime[1])开始遍历,跳过占位符
        for (int j=1; j<prime.size() && i*prime[j]<=n; ++j) {
            is_prime[i * prime[j]] = false;
            if (i % prime[j] == 0) break;
        }
    }
}
int dfs(int u,int num)...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发