您的位置:首页 > Web前端

Codeforces Round #202 (Div. 2) B. Color the Fence

2016-09-26 01:18 387 查看
题目链接:传送门

题意,给出1-9的花费,n为总量,求出能用最多的花费(<=n)画出最大的数字。

贪心,网上找的比较好的代码。

先通过最小的花费求出最多的位数。然后遍历每位数,看看这个数上面能放最大的值是多少,保证在放上这个最大值之后剩余的总量除以最小花费(即放上这个值后假设后面每个都是那个最小花费)总位数要>=最多的位数。

代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std;
#define N 10010000 int a[10]; int main(){
int i,j,n,m,k;
while(scanf("%d",&n)!=EOF){
int Min=0xffffff;
for(i=1;i<=9;i++)
{
cin>>a[i];
if(Min>a[i]) Min=a[i];
}
if(n==0||Min>n){
cout<<"-1"<<endl;
continue;
}
for(i=n/Min-1;i>=0;i--){
for(j=9;j>=1;j--){
if(n>=a[j]&&(n-a[j])/Min>=i){
n-=a[j];
cout<<j;
break;
}
}
}
cout<<endl;
}
return 0; }


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