#include<bits/stdc++.h>
using namespace std;
vector<int> a;
int max_sum,m,n;
void dfs(int index,int depth,int sum){ //index已经判断过,depth当前加的个数,sum当前相加的总和
if(depth==3) { //已经有三个数相加
max_sum=max(max_sum,sum);
return;
}
if(sum<m&&depth<3){ //未结束,从未判断的index+1开始dfs
for(int i=index+1;i<=n;++i)
if(sum+a[i]<=m) dfs(i,depth+1,sum+a[i]); //相加后不超过m,则从i继续dfs
}
}
int main(){
int T,caseNum=0;
cin>>T;
while(T--){
cin>>n>>m;
a.resize(n+1);
for(int i=1;i<=n;i++)
cin>>a[i];
max_sum=0;
dfs(0,0,0);
printf("case #%d:\n%d\n",caseNum++,max_sum);
}
return 0;
}
2973. 卡片游戏
于 2022-03-28 16:26:25 首次发布