天天看点

51Nod 1413 权势二进制

#include<bits/stdc++.h>
using namespace std;

#define max(a,b) (a>b?a:b)

int main(){
  
  int n;
  int Max=0;
  scanf("%d",&n);
  while(n)
  {
    Max=max(Max,n%10);
    n/=10;
  }
  printf("%d\n",Max);
  return 0;
}      
#include<bits/stdc++.h>
using namespace std;

#define Map1(a,b) map<a,b>
#define Map2(a,b) unordered_map<a,b>
const int maxn=1000000+100;
const int INF=0x3f3f3f3f;

int dp[maxn];
int ans[maxn]={0,1},tot=1;
Map2(int,int) M;

int main(){
  
  int start=0;
  M[0]=M[1]=1;
  while(true){
    
    int tmp=ans[start]*10;
    if(!M.count(tmp)) ans[++tot]=tmp,M[tmp]=1;
    tmp=ans[start]*10+1;
    if(!M.count(tmp)) ans[++tot]=tmp,M[tmp]=1;
    if(ans[tot]>1e6) break;
    start++;
  }
  sort(ans,ans+tot+1);
  int n;
  scanf("%d",&n);
  for(int i=0;i<maxn;i++) dp[i]=INF;
  dp[0]=0;
  for(int i=0;i<=tot;i++){
    
    for(int j=ans[i];j<=n;j++) dp[j]=min(dp[j],dp[j-ans[i]]+1);
  }
  printf("%d\n",dp[n]);
}      

继续阅读