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;imax(ans,dp[n][i]);
29         return ans;
30         
31     }
32 };

相关