想象了一个题目,一个数组中能不能选X个元素的和恰好为sum。
#include <bits/stdc++.h>
using namespace std;
#define bug(x) cout<<#x<<" == "<<x<<'\n'
#define ll long long
const int MAX_N=2e3+10;
int a[MAX_N] = { 0 };
int dp[100005]= {0};
int32_t main()
{
int n,sum;
scanf("%d", &n);
scanf("%d",&sum);
for(int i=1; i<=n; i++)
{
scanf("%d", &a[i]);
}
dp[0]=1;
for(int i=1; i<=n; i++)
{
for(int j=sum; j>=0; j--)
{
dp[j]=dp[j];
if(j>=a[i]&&dp[j-a[i]]==1)
{
dp[j]=1;
}
}
}
if(dp[sum]==1)
printf("Yes\n");
else
printf("NO\n");
}