链接:
https://www.nowcoder.com/acm/contest/128/F
来源:牛客网
来源:牛客网
题目分析:这道题首先要保证位数尽量的多,所以先找出花费最小的那个求出最大的位数,然后由高位到地位一次替换为较大的数字。
#include<bits/stdc++.h> using namespace std; int a[101]; int main(){ int n; while(~scanf("%d",&n)){ int minn=1000010;//表示最小花费 for(int i=1;i<=9;i++){ scanf("%d",&a[i]); minn=min(minn,a[i]); } int t=n/minn;//要保证最多的位数不变 if(t==0) printf("-1\n"); else{ while(t--){ for(int i=9;i>=1;i--){ if(n-a[i]>=minn*t){ cout<<i; n=n-a[i]; break; } } } cout<<endl; } } return 0; }