1 条题解
-
0
C++ :
#include <iostream> #include<cmath> using namespace std; #define ll unsigned long long ll X, K,L; const int MAX = 0x3f3f33f; ll **s; // 0:最小值 1:sum 2:max 3:min //求s[K][0] void cal(ll k,ll x) { s[k][1] = 0, s[k][2] = 0, s[k][3] = MAX; while (x) { s[k][1] += x % 10; s[k][2] = max(s[k][2], x % 10); s[k][3] = min(s[k][3], x % 10); x /= 10; } } void init() { int m=ceil(log(X+1)/log(10.0)); L=m*81+9; if(L<171) L=171; s=new ll*[L+1]; for(ll i=0; i<=L; i++) { s[i] = new ll[4]; if(i==0) { s[0][0]=0; cal(0,X); } else { s[i][0] = MAX; cal(i,i); } } } void quancheng() { init(); if (X == K) { cout<<"0"<<endl; return; } else if (K > L) { cout<<"No answer"<<endl; return; } bool flag = true; while (flag) { flag = false; for (int i = 0; i <= L; i++) { if (s[i][0] < MAX) { for (int j = 0; j <= L; j++) { if (s[j][0] < MAX) { int a = s[i][1] * s[j][2] + s[j][3]; if (s[a][0] > s[i][0] + s[j][0] + 1) { s[a][0] = s[i][0] + s[j][0] + 1; flag = true; } } } } } } if (s[K][0] < MAX) cout<<s[K][0]<<endl; else cout<<"No answer"<<endl; } int main() { //freopen("input9.txt", "r", stdin); //freopen("output9.txt", "w", stdout); while (cin >> X >> K) { if (X == 0 && K == 0) break; quancheng(); } }
- 1
信息
- ID
- 743
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者