need help!
查看原帖
need help!
1228886
skyx楼主2025/1/20 11:44
#include <bits/stdc++.h>
using namespace std;
long long dp[1005];
bool vis[1005];
int p[1005];
int main()
{
	int n;
	cin>>n;
	vis[0]=vis[1]=1;
	int cnt=1;
	for(int i=2;i<=n;i++)
	{
		if(!vis[i])
		{
			p[cnt]=i;
			cnt++;
		}
		for(int j=1;j<=cnt;j++)
		{
			if(i*p[j]>n) break;
			vis[i*p[j]]=1;
			if(i%p[j]==0) break;
		}
	}
	dp[0]=1;
	for(int i=1;i<=cnt;i++)
	{
		for(int j=p[i];j<=n;j++)
		{
			dp[j]+=dp[j-p[i]];
		}
	}
	cout<<dp[n]/2;//AC
//为什么  cout<<dp[n];  是错误的?
          return 0;
}

为什么在这种计算方案数的方法中,比如5=2+3 又被重复计算了5=3+2?

2025/1/20 11:44
加载中...