• Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) B. Maximum Sum of Digits


    传送门

      题目大意就是给一个数c,然后拆成a和b,使得a+b=c,要求使得a的各数位之和+b的各数位之和达到最大。

      我的想法就是可能不能单独考虑a的数位之和或b的数位之和,要综合考虑才能达到最优,先来看ci,ci=ai+b+flag的,这里的flag是前一位(较低位)的进位,存在是0,否则是1,若是ci-flag!=9的时候,ai+bi有2个取值,一种是ai+bi=ci-flag,另外一种是ai+bi=ci-flag+10,明显ai+bi取第二种时对答案的贡献最大,但是第二种的话,会让第i+1位对答案的贡献少1(因为进位了),但是却让第i位对答案的贡献多了10,综合看对答案的贡献净增加了9,所以总的来说第二种做法还是最优的,若是ci-flag=9的时候,ai+bi就不可以等于ci-flag+10了,因为不存在2个个位数相加超过18的,那么就只能取第一种做法了,即ai+bi=ci-flag,那么对答案的贡献就是ci-flag.

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int main()
    {
        ll ans=0;
        int flag=0;
        char s[15];
        scanf("%s",s);
        int len=strlen(s);
        if(len==1)
        {
            printf("%d
    ",s[0]-'0');
            return 0;
        }
        for(int i=len-1;i>=0;i--)
        {
            int tmp=s[i]-'0'-flag;
            if(tmp!=9)
            {
                if(i==0)
                    ans+=tmp;
                else
                    ans+=tmp+10;
                flag=1;
            }
            else
            {
                ans+=9;
            }
        }
        cout<<ans<<endl;
        return 0;
    
    }
    
  • 相关阅读:
    div标签的闭合检查
    jquery easyui 显示和关闭数据加载的遮罩
    codeforces 446A DZY Loves Sequences
    android高速开发框架xUtils
    Android-spinner
    遗传算法优化策略
    面向对象的勾勾画画
    Android studio 解决setText中文乱码问题
    CAS—改动默认登录页
    android 使用post 提交
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754845.html
Copyright © 2020-2023  润新知