分析:

状态是一些有序的集合,这些集合互不相交,并集为所有区域。显然枚举集合元素是哪些是无法承受的,

写出期望的计算式,会发现,当每个集合的大小确定了以后,概率大的优先访问是最优的。

因此先对u从大到小排序。定义状态f[i][j]表示从j开始往后分i组的最小期望。

转移是枚举划分k,则有f[i][j] = min{f[i-1][k]+(k-j)*(sum_u(j,n))},k>j

边界f[1][j] = (n-j+1)*(u[j])

处理出u的前缀和

复杂度O(w*n^2)

#include<bits/stdc++.h>
using namespace std; const int maxn = 100+;
int u[maxn];
int f[][maxn];
const int INF = 0x3f3f3f3f; //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int T; cin>>T;
while(T--){
int n,w; scanf("%d%d",&n,&w);
for(int i = ; i <= n; i++) scanf("%d",u+i);
sort(u+,u++n,greater<int>());
for(int i = ; i <= n; i++) u[i] += u[i-];
for(int j = n; j > ; j--){
f[][j] = (n-j+)*(u[n]-u[j-]);
}
for(int i = ; i <= w; i++){
for(int j = ; j <= n; j++){
f[i][j] = INF;
for(int k = j+; k <= n; k++){
f[i][j] = min(f[i-][k]+(k-j)*(u[n]-u[j-]),f[i][j]);
}
}
}
printf("%.4lf\n", f[w][]/(double)u[n]);
}
return ;
}

最新文章

  1. ORM系列之二:EF(1)
  2. mysql 日志表rename 备份
  3. c# wpf定时器的一种用法
  4. 深入理解js——作用域
  5. Java内存分配及变量存储位置实例讲解
  6. Web端即时通讯技术原理详解
  7. PMD使用提醒
  8. DOS中如何删除文件夹
  9. 卸载Windows服务
  10. dd命令刻录u盘启动盘
  11. VB.NET的反射机制
  12. echarts如何做出堆积图总计的效果
  13. 移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇
  14. FPGA时序约束——理论篇
  15. R12: Improving Performance of General Ledger and Journal Import (Doc ID 858725.1 )
  16. Android Studio 插件开发详解二:工具类
  17. Apache Hadoop学习笔记一
  18. C++ 容器操作
  19. Python实战一
  20. mysql连接拍错总结

热门文章

  1. 使用tuple统计文件中单词的个数
  2. PAT 1043【BST与二叉树】
  3. PostFX v2后期处理特效包:升级更惊艳的视觉效果
  4. 阿里、腾讯热门面试题:聊聊Unix与Java的IO模型?(含详细解析)
  5. Redis数据类型,持久化,回收策略——(Redis缓存第一章)
  6. 低价购买 dp
  7. Codeforces Round #565 (Div. 3) A. Divide it!
  8. UVa 10652(旋转、凸包、多边形面积)
  9. LeetCode 148 Sort List 链表上的归并排序和快速排序
  10. AssetDatabase的方法总结