zoukankan      html  css  js  c++  java
  • caioj 1412 动态规划3:a+b问题(完全背包方案数)

    每个素数就是一个物品,然后就相当于求完全背包方案数

    把max改成+就好了。

    #include<cstdio>
    #include<vector>
    #include<cstring>
    #define REP(i, a, b) for(int i = (a); i < (b); i++)
    using namespace std;
    
    typedef long long ll;
    const int MAXN = 1123;
    bool is_prime[MAXN];
    vector<int> prime;
    ll f[MAXN];
    
    void get_prime()
    {
    	memset(is_prime, true, sizeof(is_prime));
    	is_prime[0] = is_prime[1] = false;
    	REP(i, 2, MAXN)
    	{
    		if(is_prime[i]) prime.push_back(i);
    		REP(j, 0, prime.size()) //这里没有else,一定要做 
    		{
    			if(i * prime[j] > MAXN) break;
    			is_prime[i * prime[j]] = false;
    			if(i % prime[j] == 0) break;
    		}
    	}
    }
    
    int main()
    {
    	get_prime();
    	int n;
    	scanf("%d", &n);
    
    	f[0] = 1;
    	REP(i, 0, prime.size())
    	{
    		int cur = prime[i];
    		if(cur > n) break;
    		REP(j, cur, n + 1)
    			f[j] += f[j-cur];
    	}
    	printf("%lld
    ", f[n]);
    
    	return 0;
    }
  • 相关阅读:
    JAVA多线程之AQS
    LRU算法
    JAVA设计之SPI
    JAVA多线程之CAS
    操作系统之中断处理
    计算机领域思想
    操作系统之I/O
    操作系统之虚拟内存
    Mysql事务原理
    Mysql添加索引
  • 原文地址:https://www.cnblogs.com/sugewud/p/9819407.html
Copyright © 2011-2022 走看看