您的位置:首页 > Web前端

Color the Fence

2014-08-06 23:00 302 查看
Codeforces Round #202 (Div. 2) B:http://codeforces.com/problemset/problem/349/B

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

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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[23],v;
int minn,pos,ct;
int ans[1000002],top;
int main(){
while(~scanf("%d",&v)){
minn=1e7;
for(int i=1;i<=9;i++){
scanf("%d",&a[i]);
if(minn>=a[i]){
minn=a[i];
pos=i;
}
}
if(v<minn){
printf("-1\n");continue;
}
ct=v/minn;
int temp=v-ct*minn;
for(int i=1;i<=ct;i++)
ans[i]=pos;
top=0;
// printf("%d %d %d\n",ct,temp,minn);
while(temp>0){
int tp=0;
top++;
if(top>ct)break;
for(int i=1;i<=9;i++){
if(a[i]-minn<=temp)
tp=i;
}
if(tp==0)break;
else {
ans[top]=tp;
temp-=(a[tp]-minn);
}
}
for(int i=1;i<ct;i++){
printf("%d",ans[i]);
}
printf("%d\n",ans[ct]);
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: