leetcode第1262题 可被三整除的最大和
题目
可被三整除的最大和
给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。
思路
每个数只有选和不选两种状态,那么根据什么转移呢,因根据当前数模3之后3的余数来进行转移。
- dp[i][0]=到i为止被三整除的最大和
- dp[i][1]=到i为止除三余1的最大和
- dp[i][2]=到i为止除三余2的最大和
- 当nums[i-1]%3==0时,加入当前的数字不会对除以三的结果造成影响
dp[i][0]=max(dp[i-1][0],dp[i-1][0]+nums[i-1]);
dp[i][1]=max(dp[i-1][1],dp[i-1][1]+nums[i-1]);
dp[i][2]=max(dp[i-1][2],dp[i-1][2]+nums[i-1]);
- 当nums[i-1]%3==1时,那加入nums[i]之后,本来余0的就会余1,本来余1的余2,本来余2的余0
else if(nums[i-1]%3==1)
{
dp[i][0]=max(dp[i-1][0],dp[i-1][2]+nums[i-1]);
dp[i][1]=max(dp[i-1][1],dp[i-1][0]+nums[i-1]);
dp[i][2]=max(dp[i-1][2]