$枚举分为两步,一步为做完了几张卷子,另一部为没做完的卷子都做了那些题$
$第一步一层循环搞定,第二步需要贪心$
$贪心思路:由于每道题的分值一定,我们肯定先做花费时间较小的题来做,所谓“性价比更高”$
$这样我们枚举每道题,如果当前剩余的时间可以完成当前剩余每张卷子的这道题,那我们直接把一列都处理$
$否则需要下取整计算可以做多少道,最终对于每种方案求一个最大值即可$
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,k,m;
const int K = 50;
int t[K];
int main()
{
scanf("%d %d %d",&n,&k,&m);
int sum = 0;
for(int i=1;i<=k;i++) scanf("%d",&t[i]);
sort(t + 1,t + k + 1);
for(int i=1;i<=k;i++) sum += t[i];
int ans = 0;
for(int i=0;i<=n && i * sum <= m;i++){
int cnt = i * (k + 1);
int last = m - i * sum;
for(int j=1;j<=k;j++){
if(last >= (n - i) * t[j]){
cnt += (n - i);
last -= (n - i) * t[j];
}
else{
cnt += last / t[j];
break;
}
}
ans = max(ans,cnt);
}
printf("%d",ans);
return 0;
}