看了眼题目和数据范围\(n \leq 20,k \leq 6\)自然想到了\(dfs\)分组求解,主要是被这道题坑自闭过。

然而硬来\(dfs\)肯定会被蜜汁\(T\)掉,因为暴力\(n\)个数所在集合要跑\(n^k\)次。

于是又瞎猜了个贪心,即每次找到当前最小的集合\(p\),将\(A_i\)放置集合\(p\)。

接着被我随脚出的一个数据愉快的\(hack\)掉了。

然后就突然想到了\(randomShuffle\)随机数大法

因为\(n\)个数是按顺序放置集合的,那么能不能考虑将这个数列多打乱几次从而枚举出不同的顺序\(?\)

简单权衡一下,整个贪心复杂度是\(O(nk)\)的,那么如果我们随机打乱数列\(T\)次,也就大大增加了贪心准确的概率。总复杂度\(O(nkT)\)。

测了一下,\(T\)开到\(500000\)也挺稳的呢。据说还可以用\(priority\)_\(queue\)来维护最小集合,优化到\(O(n logk T)\),不过貌似还没必要。

\(Code:\)

#include<bits/stdc++.h>
using namespace std;
const int max_n=20+5,T=500000;
int n,k;
double a[max_n],f[max_n],x,ans=1e18;
void randomShuffle(){//随机打乱
for(int i=1;i<=n;i++)swap(a[i],a[rand()%n+1]);
}
int Findmin(){//找最小集合
int p,tot=1e18;
for(int i=1;i<=k;i++){
if(f[i]<tot)tot=f[i],p=i;
}
return p;
}
void solve(){
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++){
int p=Findmin();f[p]+=a[i];
}
double sum=0;
for(int i=1;i<=k;i++){
sum+=(f[i]-x)*(f[i]-x);
}//计算均方差
sum=sqrt(sum/k);ans=min(ans,sum);
}
int main(){
ios::sync_with_stdio(false);
srand((unsigned)time(NULL));
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i],x+=a[i];
x=x/k;//x即为平均值
for(int i=1;i<=T;i++)randomShuffle(),solve();
printf("%.2lf\n",ans);
return 0;
}

\(\operatorname{Update}\) \(\operatorname{On}\) \(\operatorname{2019.10.02}\)

最新文章

  1. 给pcm格式文件加wav文件头
  2. HDOJ多校联合第六场
  3. IOS后台执行机制 与 动作
  4. Integer和int的详细比较(转)
  5. VB execl文件后台代码,基础语法
  6. Bitmap的一个简单实现
  7. Words used when reading Redis documents
  8. Centos7网络配置-转载
  9. RxJava系列1(简介)
  10. JS中[object object]怎么取值
  11. javascript连连看
  12. tensorflow object detection api graph rewriter
  13. tornado websocket聊天室
  14. Centos6.5搭建Elasticsearch
  15. ARM Linux Oops使用小结(转)
  16. MongoDB: 如何删除一个collection中的一个字段?
  17. 合天misc100
  18. P3900 [湖南集训]图样图森破
  19. Odoo中的向导
  20. 【BZOJ】1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(dp/线段树)

热门文章

  1. 【转帖】漏洞数量242:15,英特尔和AMD CPU谁更安全?
  2. Netty原理架构解析
  3. python大道——博客目录
  4. HTML学习--基础知识
  5. 全栈项目|小书架|服务器开发-NodeJS 使用 JWT 实现登录认证
  6. C#使用Selenium
  7. windows 查看端口占用以及解决办法
  8. centos 7 安装nginx并启动(笔记)
  9. JSON省市区
  10. 【阿里云开发】- 安装MySQL数据库