题解 | #数组分组#

数组分组

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;
}

时间复杂度O(n*(max-min))

空间复杂度O(n*(max-min))

全部评论

相关推荐

后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
点赞 评论 收藏
分享
每晚夜里独自颤抖:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务