LeetCode 1262. 可被三整除的最大和(dp)

题意:
给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。

数据范围:
1 <= nums.length <= 4 * 10^4
1 <= nums[i] <= 10^4
解法:
令d[i][j]表示前i个数,能组成的%3=j的最大值,
枚举第i个数选和不选进行转移即可.
code:
class Solution {
public:
    int d[40000+5][3];
    int maxSumDivThree(vector<int>& a) {
        int n=a.size();
        for(int i=0;i<=n;i++){
            for(int j=0;j<3;j++){
                d[i][j]=-1e9;
            }
        }
        d[0][0]=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<3;j++){
                if(d[i][j]==-1e9)continue;
                int k=(j+a[i])%3;
                d[i+1][k]=max(d[i+1][k],d[i][j]+a[i]);//选
                d[i+1][j]=max(d[i+1][j],d[i][j]);//不选
            }
        }
        return d[n][0];
    }
};

你可能感兴趣的:(LeetCode 1262. 可被三整除的最大和(dp))