B. Color the Fence
被这道题卡了蛮久,只考虑到了位数最大,没想到要尽可能小以给高位腾出更多空间。
附AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int a[10]; 5 6 const int INF=1<<30; 7 8 int main(){ 9 int v,temp=0; 10 int Max=0; 11 int Min=INF; 12 cin>>v; 13 for(int i=1;i<=9;i++){ 14 cin>>a[i]; 15 if(v/a[i]>Max||a[temp]==a[i]){ 16 Max=v/a[i]; 17 temp=i; 18 } 19 if(a[i]<=Min){ 20 Min=a[i]; 21 } 22 } 23 if(Max==0){ 24 cout<<-1<<endl; 25 return 0; 26 } 27 else{ 28 int num=v/a[temp]; 29 30 Min=INF; 31 for(int i=temp+1;i<=9;i++){ 32 if(a[i]<=Min){ 33 Min=a[i]; 34 } 35 } 36 v%=a[temp]; 37 while(v>0&&v+a[temp]>=Min){ 38 int t; 39 for(int i=9;i>temp;i--){ 40 if(a[i]<=v+a[temp]){ 41 cout<<i; 42 num--; 43 t=i; 44 break; 45 } 46 } 47 v-=abs(a[t]-a[temp]); 48 } 49 for(int i=0;i<num;i++){ 50 cout<<temp; 51 } 52 53 cout<<endl; 54 } 55 return 0; 56 }