Codeforces 31E TV Game

求解最大和:2n长度数字串中A和B选n个数的子串dp算法
文章讲述了如何使用动态规划求解问题,给定一个2n长度的数字串,A和B各选n个数字组成子串,目标是找到这两组子串的最大和。通过定义dp[i][j]表示后i个数中A选了j个数的最大和,状态转移方程揭示了问题的解决方法,实际复杂度为O(n^2),并提到了状态回溯来输出答案的过程。

题意

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值