答案里有些比机测的还小的也算错了。
我的思路:始终选出最大的岩石放进总重量最小的机器人里。用数组模拟。
#include <stdio.h>
#define N_MAX 100
#define M_MAX 100
int N[N_MAX];
int M[M_MAX];
int P[N_MAX][M_MAX];
int n_accnt,m_accnt,k_rst,K;
int main()
{
int i,j,k,rcy;
int max_n_num;
int min_m_num;
scanf("%d",&n_accnt);
scanf("%d",&m_accnt);
scanf("%d",&K);
for ( i = 0; i < 100; i ++)
{
N[i] = 0;
M[i] = 0;
}
for ( i = 0 ; i < N_MAX ; i ++)
{
for ( j = 0; j < M_MAX ; j++)
{
P[i][j] = 0;
}
}
for ( i = 1 ; i <= n_accnt ; i++)
{
scanf( "%d", &N[i]);
}
for ( rcy = 0; rcy < n_accnt ; rcy++)
{
N[0] = 0;
M[0] = 0;
for ( i = 1; i <= n_accnt ; i++)
{
if (N[i] >= N[0])
{
N[0] = N[i];
max_n_num = i;
}
}
N[max_n_num] = 0;
M[0] = M[1];
for ( j = 1; j <= m_accnt ; j++)
{
if (M[j] <= M[0])
{
M[0] = M[j];
min_m_num = j;
}
}
M[min_m_num] += N[0];
//printf("N_max:%d",N[0]);
for ( k = 1 ; k <= m_accnt ; k++)
{
if ( P[min_m_num][k] == 0)
{
P[min_m_num][k] = max_n_num;
//printf("P[%d][%d] = %d",min_m_num,k,P[min_m_num][k]);
break;
}
}
/* printf("max_n_num:%d N[0]:%d\n",max_n_num,N[0]);
printf("M[min_m_num]:%d",M[min_m_num]);
printf("k:%d P[min_m_num][k]:%d\n",k,max_n_num,P[min_m_num][k]);
printf("min_m_num:%d\n",min_m_num);
*/
}
M[0] = M[1];
for ( k = 1; k <= m_accnt ; k++ )
{
if (M[k] < M[0] )
{
M[0] = M[k];
}
else
{
M[m_accnt + 1] = M[k];
}
}
k_rst = M[m_accnt +1 ] - M[0];
printf("%d",k_rst);
for ( i = m_accnt ; i >= 1 ; i --)
{
printf("\n");
for ( j = 1; P[i][j] != 0 ; j++)
{
if (P[i][j + 1] != 0)
{
printf("%d ",P[i][j]);
}
else
{
printf("%d",P[i][j]);
}
}
}
}
