Leetcode 刷题记录

三进制状压 (2172. 数组的最大与和)

https://leetcode-cn.com/problems/maximum-and-sum-of-array/

class Solution {
public:
    int dp[20][61000];
    int v[15];
    int maximumANDSum(vector<int>& nums, int numSlots) {

        v[0]=1;
        for (int i=1; i<12; i++) v[i]=v[i-1]*3;

        int n = nums.size();
        int sz = v[numSlots+1]-1;
        int ans = 0;
        for (int i=1; i<=n; i++){
            for (int k=1; k<=numSlots; k++){
                for (int j=0; j+v[k]<=sz; j++){
                    if ((j/v[k])%3<2){
                        dp[i][j+v[k]] = max( dp[i][j+v[k]] , dp[i-1][j] + ( nums[i-1] & k ));
                        ans = max(ans,dp[i][j+v[k]]);
                    }
                }
            }
        }
        return ans;
    }
};
posted @ 2022-02-25 13:22  Synnn  阅读(17)  评论(0编辑  收藏  举报