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