#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int maxSumDivThree(vector<int>& nums) {
vector<int> dp(3, 0);
for (int num : nums) {
vector<int> temp = dp;
for (int sum : temp) {
int newSum = sum + num;
int rem = newSum % 3;
dp[rem] = max(dp[rem], newSum);
}
}
return dp[0];
}
int main() {
vector<int> nums = {3, 6, 5, 1, 8};
cout << "Greatest sum divisible by 3: " << maxSumDivThree(nums) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1heFN1bURpdlRocmVlKHZlY3RvcjxpbnQ+JiBudW1zKSB7CiAgICB2ZWN0b3I8aW50PiBkcCgzLCAwKTsKCiAgICBmb3IgKGludCBudW0gOiBudW1zKSB7CiAgICAgICAgdmVjdG9yPGludD4gdGVtcCA9IGRwOyAKICAgICAgICBmb3IgKGludCBzdW0gOiB0ZW1wKSB7CiAgICAgICAgICAgIGludCBuZXdTdW0gPSBzdW0gKyBudW07CiAgICAgICAgICAgIGludCByZW0gPSBuZXdTdW0gJSAzOwogICAgICAgICAgICBkcFtyZW1dID0gbWF4KGRwW3JlbV0sIG5ld1N1bSk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBkcFswXTsgCn0KCmludCBtYWluKCkgewogICAgdmVjdG9yPGludD4gbnVtcyA9IHszLCA2LCA1LCAxLCA4fTsKICAgIGNvdXQgPDwgIkdyZWF0ZXN0IHN1bSBkaXZpc2libGUgYnkgMzogIiA8PCBtYXhTdW1EaXZUaHJlZShudW1zKSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0K