讨论 / 我的代码
ruirui19880612 2008-06-18 10:31:00
点我顶贴 收藏 删除
这个代码只得了十分,机测不准。

答案里有些比机测的还小的也算错了。

我的思路:始终选出最大的岩石放进总重量最小的机器人里。用数组模拟。

#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]);

}

}

}

}

查看更多回复
提交回复