Color the Fence

Codeforces Round #202 (Div. 2) B:http://codeforces.com/problemset/problem/349/B

题意:给你一些颜料,然后你可以用这些颜料画一些数字,画每个数字的颜料是不一样的,然后问你用这些颜料可以画出的最大的数。

题解:和容易想到,直接用贪心,数字最大,首先要使得数字的位数最多,所以要选择需要颜料最少的数字来话,此题有一个好处就是,就是不用考虑前导零的情况,数的位数确定之后,就可以用剩余的颜料来调整数字,从高位到低位,每一次把把尽可能大的数字放在高位。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 int a[23],v;
 7 int minn,pos,ct;
 8 int ans[1000002],top;
 9 int main(){
10    while(~scanf("%d",&v)){
11         minn=1e7;
12        for(int i=1;i<=9;i++){
13           scanf("%d",&a[i]);
14           if(minn>=a[i]){
15             minn=a[i];
16              pos=i;
17           }
18        }
19        if(v<minn){
20           printf("-1\n");continue;
21        }
22        ct=v/minn;
23        int temp=v-ct*minn;
24        for(int i=1;i<=ct;i++)
25           ans[i]=pos;
26           top=0;
27          // printf("%d %d %d\n",ct,temp,minn);
28        while(temp>0){
29              int tp=0;
30              top++;
31              if(top>ct)break;
32           for(int i=1;i<=9;i++){
33             if(a[i]-minn<=temp)
34                tp=i;
35           }
36            if(tp==0)break;
37            else {
38               ans[top]=tp;
39               temp-=(a[tp]-minn);
40            }
41        }
42       for(int i=1;i<ct;i++){
43         printf("%d",ans[i]);
44     }
45     printf("%d\n",ans[ct]);
46    }
47 }
View Code

 

posted on 2014-08-06 23:00  天依蓝  阅读(225)  评论(0编辑  收藏  举报

导航