题解 P10985 【[蓝桥杯 2023 国 Python A] 整数变换】
轻松拿下最优解。
题意
设
数据范围:
题解
存在复杂度
考虑将
于是我们预处理
同样地,我们还要记录最后一步减法之后,
接着只要从大到小枚举
因为
参考代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e4 + 3;
const int MAXW = 1e5 + 3;
const int MAXM = 100 + 3;
int H[MAXM][MAXN][2];
int W[MAXW];
int main(){
int n;
cin >> n;
int h = n / 10000;
int l = n % 10000;
for(int i = 1;i <= 100000;++ i){
W[i] = W[i / 10] + i % 10;
}
for(int i = 0;i <= 100;++ i){
for(int j = 0;j <= 9999;++ j){
int t = i + W[j];
if(t > j){
H[i][j][0] = 1;
H[i][j][1] = j - t + 10000;
} else {
H[i][j][0] = H[i][j - t][0] + 1;
H[i][j][1] = H[i][j - t][1];
}
}
}
int ans = 0;
for(int i = h;i >= 0;-- i){
ans += H[W[i]][l][0];
l = H[W[i]][l][1];
}
cout << ans - 1 << endl;
return 0;
}