链接:
https://www.nowcoder.com/acm/contest/128/F
来源:牛客网
来源:牛客网
题目描述
托米发现了一种新的游戏--填数字!
每填写一次数字(1≤ i≤9)需要花费a i枚金币,托米总共有n枚金币.
每填写一次数字(1≤ i≤9)需要花费a i枚金币,托米总共有n枚金币.
托米想知道他能得到的最大数字是多少.
如果填不了请输出-1。
不需要用完所有金币
输入描述:
第一行一个数字n,表示金币总数. 第二行9个正整数,第i个数字表示填写一次数字i所需要的金币数.
输出描述:
输出满足条件的最大数字.
#include <bits/stdc++.h>
using namespace std;
struct haha{
int i;
int s;
}we[10];
int n;
bool cmp(haha a,haha b){
if(a.s==b.s) return a.i>b.i;
return a.s<b.s;
}
void quicle(int w){
int g=we[1].i,gg;
int f=0;
for(int i=1;i<=9;i++)
if(we[i].s<=w+we[1].s){
if(g<we[i].i){
f=1;
g=we[i].i;
gg=w-we[i].s+we[1].s;
}
}
printf("%d",g);
n-=we[1].s;
if(gg!=0 && f==1)
quicle(gg);
}
int main(){
while(~scanf("%d",&n)){
for(int i=0;i<=9;i++){
we[i].i=i;
}
for(int i=1;i<=9;i++){
scanf("%d",&we[i].s);
}
sort(we+1,we+10,cmp);
int s=we[1].s;
if(s>n){
printf("-1\n");
continue;
}
if(n%s==0){
while(n){
n-=s;
printf("%d",we[1].i);
}
printf("\n");
}
else{
int w=n%s;
n-=w;
quicle(w);
while(n){
n-=s;
printf("%d",we[1].i);
}
printf("\n");
}
}
}