题意
2*n长度的数字串a,A和B分别选出n个数字组成子数字串,求两子数字串的最大和。
题解
设dp[i][j]是后i个数其中A选了j个数的最大和(从后往前选在状态转移时可以不管A和B具体选了哪些数字),假设a已经是倒序状态,那么转移方程为:
dp[i+1][j]=max{ dp[i][j]+a[i+1]*10^(i-j), dp[i][j-1]+a[i+1]*10^(j-1) }
初始状态dp[0][0]=0, 除开初始状态dp数组初始值最好设为负数因为输入数字串有0。注意j不要超过n。最大和是dp[2n][n],状态回溯输出答案即可。
吐槽
乍一看数据规模以为是状压,结果上手发现是O(n^2)的DP。
求解最大和:2n长度数字串中A和B选n个数的子串dp算法
文章讲述了如何使用动态规划求解问题,给定一个2n长度的数字串,A和B各选n个数字组成子串,目标是找到这两组子串的最大和。通过定义dp[i][j]表示后i个数中A选了j个数的最大和,状态转移方程揭示了问题的解决方法,实际复杂度为O(n^2),并提到了状态回溯来输出答案的过程。
861

被折叠的 条评论
为什么被折叠?



