1 条题解
-
0
自动搬运
来自洛谷,原作者为

S__X
且放白鹿青崖间,须行即骑访名山搬运于
2025-08-24 22:49:20,当前版本为作者最后更新于2023-01-24 16:19:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目简化
给你一个数,从它的个位到最高位进行操作,对于其每一位,你可以选择让他增加 ,减少 (如果当前位是 ,减 后会退位) 或者不变。
分析
要使每一位的总和最大,我们可以对每一位进行判断。
-
如果当前位不是 和 ,那么显然要加一。如:,最大总和即为每一位加一再相加。
-
如果当前位是 就减一。简单证明: 后,当前位变成 ,下一位因为退位需要 。这样子总和增加了 ,显然比增加 更优。如 ,最大总和即为个位减一再相加 。当然,如果 就要特判。
-
当前位上的数值为 时,不需要操作,证明平凡,和上面相似。
代码:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; while(n--){ int a,sum=0; cin>>a; if(a==0) sum=1;//特判 else { while(a!=0){ if(a%10==0) a-=1;//当前值为0时 else if(a%10!=9) a+=1;//当前值为1~8时 //为9时不变 sum+=(a%10);//加和 a/=10; } } cout<<sum<<endl; } return 0; } -
- 1
信息
- ID
- 8314
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者