解题思路
一道贪心,用预算n得到最大的x。在9个数中得出操作的最大次数max以及操作的最小花费min,之后进行循环。在循环中每次算出当前花费cur_cost,当cur_cost小于等于预算时,将循环到的当前数进行操作,最后输出。
解题代码
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int n, c[10];
string x;
signed main()
{
cin >> n;
for(int i = 1; i <= 9; i++)
cin >> c[i];
int mx = 0, mn = 1e9;
for(int i = 1; i <= 9; i++){
mx = max(mx, n/c[i]);
mn = min(mn, c[i]);
}
for(int i = 0; i < mx; i++){
for(int j = 9; j >= 1; j--){
int cur_cost = (mx-i-1) * mn + c[j];
if(cur_cost <= n){
n -= c[j];
x.push_back(j+48);
break;
}
}
}
cout << x << endl;
}