题目大意:
把N个数分成K组,使得尽可能平均
输入N,K,接下来N个整数
解题思路:
N个数的K划分问题
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 502
int dist[maxn][maxn],n,m;
int value[maxn];
void init()
{
int i;
memset(dist,0,sizeof(dist));
memset(value,0,sizeof(value));
for(i=1;i<=m;i++)
{
scanf("%d",&dist[0][i]);
dist[1][i]=dist[1][i-1]+dist[0][i];
}
return;
}
void funs()
{
int i,j,k,min,num,temp;
for(i=2;i<=n;i++)
{
for(j=i;j<=m;j++)
{
k=j;
min=dist[1][j];
num=0;
while(k>=i)
{
num+=dist[0][k];
k--;
temp=num>dist[i-1][k]?num:dist[i-1][k];
if(min>=temp)
min=temp;
else
break;
}
dist[i][j]=min;
}
}
k=m;i=n;
while(k>0)
{
num=0;
while(k>=i&&num+dist[0][k]<=dist[n][m])
{
num+=dist[0][k];
k--;
}
i--;
value[k+1]=1;
}
printf("%d",dist[0][1]);
for(i=2;i<=m;i++)
{
if (value[i] == 1) printf(" /");
printf(" %d",dist[0][i]);
}
printf("\n");
return;
}
int main()
{
int count;
scanf("%d",&count);
while(count--)
{
scanf("%d%d",&m,&n);
init();
funs();
}
return 0;
}
本文介绍了一种将N个整数分为K组的方法,以实现各组数值尽可能地平均分配。通过动态规划思想,该算法有效地解决了这一问题,并提供了完整的C++代码实现。
1万+

被折叠的 条评论
为什么被折叠?



