zoukankan      html  css  js  c++  java
  • poj 2109 (贪心)

    #include<stdio.h>
    #include<string.h>
    #define N 1100
    int n,str[N],k[N],a[N];
    char p[N];
    void pown()
    {
        int i,j,b[N],g;
        for(i=1;i<=N;i++){a[i]=0;}
        a[0]=1;
        for(g=0;g<n;g++)
        {
            for(i=0;i<N;i++)
            {
                b[i]=a[i];
                a[i]=0;
            }
    
        for(i=0;i<N;i++)
        {
            for(j=0;j<10;j++)
            {
                a[i+j]+=b[i]*k[j];
            }
        }
        for(i=0;i<N-1;i++)
        {
            a[i+1]+=a[i]/10;
            a[i]=a[i]%10;
        }
     }
    }
    int main()
    {
        int i,j;
        while(~scanf("%d%s",&n,p))
        {
            for(i=0;i<=10;i++)k[i]=0;
            int len=strlen(p);
            for(i=0;i<len;i++)
            {
                a[i]=p[i]-'0';
    
            }
            for(i=0;i<N;i++)str[i]=0;//不要忘了将str清0,否则会错
            for(j=0,i=len-1;j<len;i--,j++)str[j]=a[i];//将p倒置
    
            for(i=9;i>=0;i--)//将k值从高位到低位一次尝试
            {
                for(k[i]=9;k[i]>=0;k[i]--)
                {
                    pown();//求k的n次方
                    for(j=N-1;j>=0;j--)
                    {
                        if(a[j]!=str[j])break;
                    }
                    if(a[j]<=str[j])break;
                    //如果a(即此时的k^n值)小于等于p那么k的第i位值为当前值
                }
            }
            for(i=9;i>0;i--)
            {
                if(k[i]!=0)break;
            }
            for(;i>=0;i--)
            {
                printf("%d",k[i]);
            }
            printf("\n");
    
    
        }
    }
    

      

  • 相关阅读:
    hdoj5813【构造】
    Codeforces645B【树状数组求逆序数】
    pojcoin【未完待续】
    hdoj5818【模拟】
    poj2385【基础DP】
    poj3069【贪心,水】
    谦虚
    poj3617【贪心】
    poj2229【完全背包-规律Orz...】
    poj3176【简单DP】
  • 原文地址:https://www.cnblogs.com/acSzz/p/2363855.html
Copyright © 2011-2022 走看看