0 1背包方案计数问题,坑爹的蓝桥杯,是我理解能力差,还是题意不明白,哎 ,还是没认真读题呀
#include <bits/stdc++.h> using namespace std; #define int long long #define JD(x) setprecision(x) const double PI = acos(-1.0); const int maxn = 1e5 + 5; const int mod = 1e9 + 7; priority_queue<int, vector<int>, greater<int> >q; int dp[maxn]; bool is[maxn]; vector<int>isprime; void f(){ memset(is, true, sizeof is); is[0]=is[1]=false; for(int i=2;i<maxn;i++){ if(is[i]){ if(i>2019)break; isprime.push_back(i); for(int j=i*2;j<maxn;j+=i) is[j]=false; } } } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); f(); //for(int i=0;i<isprime.size();i++)cout<<isprime[i]<<endl; //cout<<isprime.size()<<endl; dp[0]=1; for(int i=0;i<isprime.size();i++){ for(int j=2019;j>=0;j--){ if(j>=isprime[i]){ dp[j]+=dp[j-isprime[i]]; } } } cout<<dp[2019]<<endl; return 0; }