1023 组个最小数 (20分)

贪心策略是:先从1 ~ 9中选择个数不为0的最小的数输出,然后从0~9输出数字,每个数字输出次数为其剩余个数。

策略正确性的证明:首先,由于所有数字都必须参与组合,因此最后结果的位数是确定的。然后,由于最高位不能为0,因此需要从[1, 9]中选择最小的数输出( 如果存在两个长度相同的数的最高位不同,那么一定是最高位小的数更小)。最后,针对除最高位外的所有位,也是从高位到低位优先选择[0,9]中还存在的最小的数输出。

const int N=15;
int cnt[N];

int main()
{
    for(int i=0;i<10;i++) cin>>cnt[i];

    for(int i=1;i<10;i++)
        if(cnt[i])
        {
            cout<<i;
            cnt[i]--;
            break;
        }

    for(int i=0;i<10;i++)
        for(int j=0;j<cnt[i];j++)
            cout<<i;
    cout<<endl;
    //system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14338214.html