题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=791
题意:
有v升的涂料。给出涂每个数字1~9所需的涂料;如果可以涂,则输出涂出的最大数字, 否则输出-1;
分析:
涂料一定, 肯定涂出的数字越多,数字就越大。所以我们就可以在涂出数字最多的情况下,枚举每一位的可以数字取最大(从9开始枚举找打第一个符合既是答案)。 枚举的符合条件就是当前的涂料可以涂此数字并且涂完此数字不影响涂的总数字的个数(即涂的总数字的个数不会减小)。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[10];
int main()
{
int n;
while(~scanf("%d", &n))
{
int Min = 0x3f3f3f3f;
for(int i = 1; i < 10; i++)
{
scanf("%d", &a[i]);
Min = min(Min, a[i]);
}
if(n < Min)
{
puts("-1");
continue;
}
for(int i = n/Min-1; i >= 0; i--)
{
for(int j = 9; j > 0; j--)
{
if(n>=a[j] && (n-a[j])/Min>=i)
{
printf("%d", j);
n -= a[j];
break;
}
}
}
puts("");
}
return 0;
}

1527

被折叠的 条评论
为什么被折叠?



