Thanos Power
题意:初始为0,你每次可以选10^x,x可为任意值,问最少多少次操作可以变成给定的数字。
思路:dp[0][i]表示该位数字往上走的最少花费,dp[1][i]表示往下走的最少花费。从左到右递推。dp[0][i]=a[i]+min(dp[0][i-1]-1+dp[1][i-1]+1),dp[1][i]=a[i]+min(dp[0][i-1],dp[1][i-1]).
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[2][100005];
char s[100005];
int main(){
scanf("%s",s);
int l=strlen(s);
dp[0][0]=10-(s[0]-'0')+1;
dp[1][0]=s[0]-'0';
for(int i=1;i<l;i++){
dp[1][i]=s[i]-'0'+min(dp[0][i-1],dp[1][i-1]);
dp[0][i]=10-(s[i]-'0')+min(dp[0][i-1]-1,dp[1][i-1]+1);
}
printf("%lld\n",min(dp[0][l-1],dp[1][l-1]));
}