#include<iostream>
#include<algorithm>
using namespace std;
int book[10] = { 0 }, a[10] = { 0 }, b[10] = { 0 };//book检测是否用了,a用来记录数据,b用来当作容器
int temp = 9999999;
int n, m;
void dfs(int step, int pos)
{
if (step > n)//选出最大最小值进行相减,比较
{
int ma = b[1], mi = b[1];
for (int k = 1; k <= m; k++)
{
ma = max(ma, b[k]);
mi = min(mi, b[k]);
}
temp = min(temp, ma - mi);
return;
}
int i, j;
for (i = pos; i <= n; i++)//枚举每根木棍放进容器的选择
{
for (j = 1; j <= m; j++)
{
if (book[i])
break;
book[i] = 1;
b[j] += a[i];
dfs(step + 1, i + 1);
book[i] = 0;
b[j] -= a[i];
}
}
return;
}
int main(void)
{
cin >> n >> m;
int i;
for (i = 1; i <= n; i++)
cin >> a[i];
dfs(1, 1);
cout << temp;
return 0;
}
试题 算法训练 粘木棍
最新推荐文章于 2023-11-11 12:44:52 发布