From f8a7128ccd597c9137d7132558cb2f8d4c14a468 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Sun, 13 Feb 2022 13:50:49 -0800 Subject: [PATCH] Create 2172.Maximum-AND-Sum-of-Array_v1.cpp --- .../2172.Maximum-AND-Sum-of-Array_v1.cpp | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Dynamic_Programming/2172.Maximum-AND-Sum-of-Array/2172.Maximum-AND-Sum-of-Array_v1.cpp diff --git a/Dynamic_Programming/2172.Maximum-AND-Sum-of-Array/2172.Maximum-AND-Sum-of-Array_v1.cpp b/Dynamic_Programming/2172.Maximum-AND-Sum-of-Array/2172.Maximum-AND-Sum-of-Array_v1.cpp new file mode 100644 index 000000000..dc3dde47e --- /dev/null +++ b/Dynamic_Programming/2172.Maximum-AND-Sum-of-Array/2172.Maximum-AND-Sum-of-Array_v1.cpp @@ -0,0 +1,33 @@ +class Solution { +public: + int maximumANDSum(vector& nums, int numSlots) + { + int n = nums.size(); + nums.insert(nums.begin(), 0); + int m = pow(3, numSlots); + vector>dp(n+1, vector(m, INT_MIN/2)); + dp[0][0] = 0; + + int ret = 0; + for (int i=1; i<=n; i++) + for (int state = 0; state < m; state++) + { + for (int j=0; j=1) + dp[i][state] = max(dp[i][state], dp[i-1][state - pow(3,j)] + (nums[i]&(j+1))); + } + if (i==n) + ret = max(ret, dp[i][state]); + } + + return ret; + } + + bool filled(int state, int k) + { + for (int i=0; i