Baltic 2010 Candies
来源:互联网 发布:南箫制作数据 编辑:程序博客网 时间:2024/05/04 08:25
http://www.cppblog.com/jsn1993/archive/2010/05/21/116026.html 上有一个很不错的方法,但可惜最坏情况下区间数还是O(n)级别的(b[1], b[2], ..., b[i]分别为2^i,后面的都取7000, 则所有偶数都可以组合出来,奇数都不可组合出来),因此其动规还是O(N^3)级别的。如果分组优化,把每组的大小设为(sqrt(n*4+1)+1)/2,可以把最坏情况的复杂度降至O(n^2.5)。
后来看了官方题解,发现其方法非常巧妙,核心为以下函数:
Algorithm 1 generate((p1 , p2 , p3 , ..., pm ), S)
if m = 1 then
S is one of the desired structures
else
S1 = add(S, (p1 , p2 , ..., p m/2 ))
S2 = add(S, (p m/2 +1 , ..., pm ))
generate((p m/2+1 , ..., pm ), S1 )
generate((p1 , p2 , ..., p m/2 ), S2 )
end if
参数中S为已经获得的可组合出的数,p1..pm为要加入的包。该算法可在O(B * n * m log m)内运行完毕,并能获得S加上p的所有m-1个元素的子集所能得到的组合结果。
由于官方数据比较厚道,区间数很少,我想到在以上算法的基础上加上区间处理的优化,于是程序运行的效果非常好……
- Baltic 2010 Candies
- Candies
- Candies
- bzoj2346[Baltic 2011]Lamp
- BZOJ2348 [Baltic 2011]Plagiarism
- Emptying the Baltic
- [Baltic 2001]Mars Maps
- Candies(HackerRank candies)
- InterviewStreet --Candies
- poj3159 Candies
- zoj Candies
- ZOJ Candies
- Another Candies
- poj3159 Candies
- Free Candies
- Hackerrank :Candies
- poj3159 Candies
- 【poj3159】 Candies
- gcc编译和linux下proc编译的总结
- Alarm高级操作
- 使用scp命令在两台linux上对拷文件或者文件夹
- Windows Embedded Compact 7试用笔记(1)——新变化
- 共享数据方式
- Baltic 2010 Candies
- 共享数据的高级技巧
- Windows Embedded Compact 试用笔记(2)——系统定制
- 事件操作
- 如何用ASP生成网页静态页面
- 使用 OpenLDAP 集中管理用户帐号[多图]
- BREW Callback
- 使用配置文件(.settings、.config)存储应用程序配置
- 取得DataGridView中被选择的列、行、单元格,列、行、单元格选择设定