码迷,mamicode.com
首页 > 其他好文 > 详细

cf Maximum Sum of Digits

时间:2018-10-05 10:49:54      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:str   class   print   最大   ...   maximum   pre   贪心   证明   

贪心,找到最大的小于n的999999,就是n1,然后n2=n-n1

这两个就是最佳分配。

 

原因:

从99...99+x=n出发,如果99..9减去某个数,比如342,那么s(99..9)会减少s(342)=9,但是s(x+342)最多比s(x)多s(342),在没有进位发生的时候的确多了s(342),但是不会超过这个,由此可知把n分成99..9+x的方式是最优的。

上面比较简略,还要证明大于99..9的n1和剩下的不会超过这个,没去细想。

code:

s=input()
n=int(s)
def so(s):
    ans=0
    if type(s)==int:
        s=str(s)
    for c in s:
        ans+=ord(c)-ord(0)
    return ans
def m9(s):
    ans=9
    while ans*10+9<=s:
        ans=ans*10+9
    return ans
if n<=9:
    print(n)
    quit()
n1=m9(n)
n2=n-n1
print(so(n1)+so(n2))

 

cf Maximum Sum of Digits

标签:str   class   print   最大   ...   maximum   pre   贪心   证明   

原文地址:https://www.cnblogs.com/waldenlake/p/9744003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!