leetcode 6007. 数组的最大与和
//三进制状压dp;
1 class Solution { 2 public: 3 int maximumANDSum(vector<int>& nums, int k) { 4 5 int n=nums.size(); 6 int mx=1; 7 for(int i=1;i<=k;i++)mx*=3; 8 int dp[n+1][mx]; 9 memset(dp,0,sizeof(dp)); 10 for(int i=1;i<=n;i++) 11 { 12 for(int v=1;v) 13 { 14 int w=1,sum=v; 15 for(int j=1;j<=k&∑j++) 16 { 17 int t=sum%3; 18 if(t) 19 { 20 dp[i][v]=max(dp[i][v],dp[i-1][v-w]+(j&nums[i-1])); 21 } 22 w*=3; 23 sum/=3; 24 } 25 } 26 } 27 int ans=0; 28 for(int i=0;i max(ans,dp[n][i]); 29 return ans; 30 31 } 32 };