51,724
社区成员




T1
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1005;
int n,m,maxn;
int dp[N],s[N];
int v[N][N],w[N][N];
int main()
{
cin>>m>>n;
for(int i=1; i<=n; i++)
{
int a,b,c;
cin>>a>>b>>c;
s[c]++;//s存每一组有几个
v[c][s[c]]=a, w[c][s[c]]=b;
maxn=max(maxn,c);
}
for(int i=1; i<=maxn; i++)
for(int j=m; j>=0; j--)
for(int k=1; k<=s[i]; k++)
if(j>=v[i][k]) dp[j]=max(dp[j],dp[j-v[i][k]]+w[i][k]);
cout<<dp[m];
return 0;
}
T2
#include <iostream>
using namespace std;
const int N=1005;
long long n,cnt;
int pri[N];
bool st[N];
long long dp[N];//合成n的方案数
void prime()
{
for(int i=2; i<=n; i++)
{
if(!st[i]) pri[cnt++]=i;
for(int j=0; pri[j]<=n/i; j++)
{
st[i*pri[j]]=true;
if(i%pri[j]==0) break;
}
}
}
int main()
{
int ans=0;
cin>>n;
prime();
dp[0]=1;
for(int i=2; i<=n; i++)
{
if(!st[i])
{
for(int j=i; j<=n; j++)
dp[j]+=dp[j-i];
}
}
cout<<dp[n];
return 0;
}