一个人口统计办公室要绘制一张地图。由于技术的原因只能使用少量的颜色。两个有相同或相近人口的区域在地图应用相同的颜色。例如一种颜色k,则A(k) 是相应的数,则有:
- 在用颜色k的区域中至少有一半的区域的人口不大于A(k)
- 在用颜色k的区域中至少有一半的区域的人口不小于A(k)
区域颜色误差是该区域的人口与A(k)差的绝对值。累计误差是所有区域颜色误差的总和。我们要求出一种最佳的染色方案(累计误差最小)。
任务
写一个程序:
- 读入每个区域的人口数
- 计算最小的累计误差
- 将结果输出
标签:方案 set i+1 sample pac memset cst cout 使用
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int a[3333]={0},f[3333][11]={0},s[3333]={0}; int main() { int n=0,m=0; cin>>n>>m; for (int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); for (int i=1;i<=n;i++) s[i]=s[i-1]+a[i]; memset(f,2^30+1,sizeof(f)); f[0][0]=0; for (int i=1;i<=n;++i) for (int j=1;j<=m;++j) for (int k=0;k<i;++k) f[i][j]=min(f[i][j],f[k][j-1]+a[(i+k+1)/2]*((i+k+1)/2-k)-s[(i+k+1)/2]+s[k]+s[i]-s[(i+k+1)/2]-a[(i+k+1)/2]*(i-(k+i+1)/2)); cout<<f[n][m]<<endl; return 0; }
标签:方案 set i+1 sample pac memset cst cout 使用
原文地址:http://www.cnblogs.com/Maxxzy/p/6224564.html