1. 程式人生 > >cf Maximum Sum of Digits

cf Maximum Sum of Digits

n) urn -o while 最大 nbsp 的確 git print

貪心,找到最大的小於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