标签:预处理 return int app scan while bool c++ ble
https://www.luogu.com.cn/problem/P2563
完全背包。
预处理出来 \(200\) 以内的素数。
以每个素数为物品进行背包。
时间复杂度:\(O(200\times \sqrt{200}+200\times \frac{200}{\ln 200}+T)\approx O(10576)\)。
#include <bits/stdc++.h>
using namespace std;
int n,dp[210];
int zs[210],tot;
bool prime(int x) {
for(int i=2;i*i<=x;i++)
if(x%i==0)
return 0;
return 1;
}
int main() {
for(int i=2;i<=200;i++)
if(prime(i))
zs[++tot]=i;//最为暴力的素数筛法
dp[0]=1;
for(int i=1;i<=tot;i++)
for(int j=zs[i];j<=200;j++)
dp[j]+=dp[j-zs[i]];//完全背包
while(scanf("%d",&n)==1)
printf("%d\n",dp[n]);//O(1) 回答
}
标签:预处理 return int app scan while bool c++ ble
原文地址:https://www.cnblogs.com/lajiccf/p/12943459.html