CF846B
原题链接:Math Show
话归原题,接下来就是快乐的解题时间啦~
(博客里食用更佳)
首先,我们可以发现 n 和 k 的数据范围都非常小,其次,每个子任务分值相同,设 dp[i] 为做了 i 个完整的任务(其余做的是单独子任务)的最多分数将 t 数组排序后暴力求解
也不多说了,剩下的注释都在代码里了~
#include<iostream>
#include<cstdio>
#include<algorithm> //sort需要的
using namespace std;
int n,k,N,sum,ans,nim,s,t[55],a[55];//a[i]为做了i个完整的任务(其余做的事单独子任务)最多的分数
int main(){
cin>>n>>k>>N;
for(int i=1; i<=k; i++){scanf("%d",&t[i]);sum+=t[i];}
sort(t+1,t+1+k);//给t数组排序
for(int i=0; i<=n; i++){//暴力
if(sum*i>N) break;
a[i]=i*k+i;
nim=n-i;
s=sum*i;
for(int j=1; j<=k; j++){
for(int sss=1; sss<=nim; sss++){
s+=t[j];
if(s>N) break;
a[i]++;
}
if(s>N) break;
}
ans=max(a[i],ans);//如果做了i个完整的任务最多分数比ans大,那他就是最多能挣的分数
}
cout<<ans;
return 0;
}
//P上水印
//┭┮﹏ ┭┮
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】