codeforces758D

题意:题意:一个n进制下的数k,其中k不会用字母,如果有A就用10代替了。求k这个数对应的,在10进制下最小的数。

先发一个大佬的博客,下面主要是参考了他的思想:https://www.cnblogs.com/TreeDream/p/6322755.html

下面是我按照他的源代码写了备注然后过了的一段代码:(注::::::::主要代码来自上面那个老哥)

代码如下:

   

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const ll INF=(1LL<<62)-1;//奇妙的设法 
 5 char s[105];
 6 ll dp[105];
 7 int main()
 8 {
 9     int n;
10     scanf("%d%s",&n,s+1);
11     int len=strlen(s+1);
12     for(int i=0; i<=len; i++)
13         dp[i]=INF;//求最小,先赋比较大的值 
14     dp[0]=0;
15     for(int i=1; i<=len; i++) //核心思想是从前到后 
16     {                         //这样可以判断前导0,而且n也方便相乘 
17         ll now=0;
18         for(int j=i; j<=len; j++)
19         {
20             now=now*10+s[j]-'0';
21             if(now>=n)break;
22             if(s[i]=='0' && j>i)break;
23             if(1.0*dp[i-1]*n+now>2e18)break;
24             dp[j]=min(dp[j],dp[i-1]*n+now);//从后往前看,这个n可以直接赋掉 
25         }
26     }
27     printf("%lld",dp[len]);
28     return 0;
29 }
View Code

接下来是我重写的一遍代码:

猜你喜欢

转载自www.cnblogs.com/pandaking/p/9974203.html