2 条题解
-
0
#include <bits/stdc++.h> using namespace std; int s[5], a[21],ans; int main() { for (int i = 1; i <= 4; i++){ cin >> s[i]; } for(int i=1;i<=4;i++){ for(int j=1;j<=s[i];j++){ cin>>a[j]; } int minn=INT_MAX; for(int j=0;j<(1<<s[i]);j++){ int sum1=0,sum2=0; for(int k=0;k<s[i];k++){ if(j&(1<<k)){ sum1+=a[k+1]; } else{ sum2+=a[k+1]; } } minn=min(minn,max(sum1,sum2)); } ans+=minn; } cout << ans; return 0; }
- 变量声明:
s[5]
:一个长度为5的数组,用于存储接下来要输入的4个集合的大小。a[21]
:一个长度为21的数组,用于存储所有集合中的元素。ans
:累加每个集合中找到的最小最大和。
- 输入:
- 首先,代码读取4个整数,分别存储在
s[1]
到s[4]
中,表示接下来要输入的4个集合的大小。 - 然后,对于每个集合,代码读取相应数量的整数,并存储在
a
数组中。
- 首先,代码读取4个整数,分别存储在
- 处理:
- 对于每个集合(由
s[i]
定义大小),代码执行以下操作:- 初始化
minn
为INT_MAX
(整数的最大值),用于存储当前集合中找到的最小最大和。 - 使用三层循环来遍历所有可能的子集组合:
- 外层循环遍历所有子集(使用位运算表示)。
- 中间层循环计算当前子集的元素和(
sum1
)和不在该子集中的元素和(sum2
)。 - 内层循环遍历集合中的每个元素,并根据当前子集的选择情况将其添加到
sum1
或sum2
中。
- 使用
min
和max
函数更新minn
,以确保它是当前集合中找到的最小最大和。
- 初始化
- 将
minn
累加到ans
中。
- 对于每个集合(由
- 输出:
- 输出
ans
,即所有集合中找到的最小最大和的累加值。
- 输出
- 变量声明:
-
0
#include <bits/stdc++.h> using namespace std; int s[5],ans,a[21]; int main(){ for(int i=1;i<=4;i++)cin>>s[i]; for(int i=1;i<=4;i++){ for(int j=1;j<=s[i];j++)cin>>a[j]; int minn=INT_MAX; for(int j=1;j<(1<<s[i]);j++){ int sum1=0,sum2=0; for(int k=0;k<s[i];k++){ if(j&(1<<k))sum1+=a[k+1]; else sum2+=a[k+1];} minn=min(minn,max(sum1,sum2)); } ans+=minn; } cout<<ans; return 0;}
- 1
信息
- ID
- 613
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 298
- 已通过
- 73
- 上传者