题解
2024-01-05 13:19:35
发布于:吉林
62阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int a,n[50],s[50],h[5];
int aa,bb,cc,min1=114514,min2=114514,ct=0;
void dfs(int x,int y){//深搜过程可以把一组数据分成两份使其差最小
//x为层数
//本质:把1-a这a个数字分为两部分用n来储存借此得到最小差时的最大值
if(y>a){
for(int i=1;i<x;i++){
aa+=s[n[i]];
}
cc=bb-aa;
if(abs(aa-cc)<min1){
min1=abs(aa-cc);//最小差
min2=max(aa,cc);//此最小差时的最大值
}
aa=0;
cc=0;
return;
}
n[x]=y;
//对于x层的y有两种变化
dfs(x+1,y+1);//进入下一层
dfs(x,y+1);//y+1
}
int main(){
cin>>h[1]>>h[2]>>h[3]>>h[4];//分别输入四科题目数
for(int i=1;i<=4;i++){//对应四个科目
a=h[i];
for(int j=1;j<=a;j++){//输入每道的时间
cin>>s[j];
bb+=s[j];
}
dfs(1,1);//进行深搜每一科搜一次
ct+=min2;//min2为每次搜索后得出的每一科需要的最短时间
bb=0;
min1=114514;
min2=114514;
}
cout<<ct;
return 0;
}
全部评论 1
打个注释呗
2024-01-04 来自 浙江
0可以
2024-01-05 来自 吉林
0
有帮助,赞一个