题解 | #数组分组#
数组分组
https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86?tpId=37&tqId=21316&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fdifficulty%3D4%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=4&judgeStatus=undefined&tags=&title=
#include <iostream>
#include <vector>
using namespace std;
int dp[64][2048], arr[64]; // t1 - t2 + 1000: [0, 2000]
int main()
{
int n, p=0, t, sum1 = 0, sum2 = 0;
cin>>n;
for(int i = 0; i<n;i++){
cin>>t;
if(t % 5 == 0)sum1 += t;
else if(t%3 == 0) sum2 += t;
else arr[++p]=t;
}
dp[0][sum1-sum2+1000]=1;
for(int i = 1;i<=p;i++){
for(int j = arr[i]; j+arr[i]<=2000; j++){
// t1-(t2+arr[i])+1K = j -> t1-t2+1k = j+arr[i]
dp[i][j] |= dp[i-1][j+arr[i]]; // put into t2
// (t1+arr[i])-t2+1K = j -> t1-t2+1k = j-arr[i]
dp[i][j] |= dp[i-1][j-arr[i]]; // put into t1
}
}
if(dp[p][1000])cout<<"true"<<endl;
else cout<<"false"<<endl;
return 0;
}


