Codeforces 31E TV Game

题意

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、付费专栏及课程。

余额充值