

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
using namespace std;
#define R read()
#define GC getchar()
#define ll long long
#define ull unsigned long long
#define INF 0x7fffffff
#define LLINF 0x7fffffffffffffff
ll read(){
    ll s=0,f=1;
    char c=GC;
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-f;c=GC;}
    while(c>=‘0‘&&c<=‘9‘){s=s*10+c-‘0‘;c=GC;}
    return s*f;
}
void fre(){
    freopen("times.in","r",stdin);
    freopen("times.out","w",stdout);
}
int t,n,m;
int k[20][110];
int ans;
void dfs(int num,int cnt,int sum){//num表示剩几分钟,cnt表示还有几个试卷没枚举,sum表示现在的分数
    if(cnt==1){//cnt如果是1就表示只剩下一个试卷了,已经没有什么其他的方案了,所以更新答案&退出
        ans=max(ans,sum+k[n-cnt+1][num]);//更新答案
        return ;
    }
    for(int i=0;i<=num;++i){
        dfs(num-i,cnt-1,sum+k[n-cnt+1][i]);//继续搜索,i表示这一个试卷上用i分钟
    }
}
int main(){
    fre();
    t=R;n=R;m=R;
    for(int i=1;i<=n;++i){
        for(int j=1+m;j<=t+m;++j){//输入,加m是因为我把写名字和写试卷的时间弄在一起算了
            k[i][j]=R;
        }
    }
    dfs(t,n,0);//搜索
    printf("%d",ans);//输出
    return 0;
}
原文:https://www.cnblogs.com/FUXyao/p/12906210.html