二分+dp.

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define maxn 50050
  6. #define mod 10007
  7. using namespace std;
  8. int n,m,l[maxn],len,sums=,lb[maxn],dp[maxn][],sum[maxn][],mx=,ans=;
  9. bool check(int len)
  10. {
  11. int now=l[],ret=;
  12. for (int i=;i<=n;i++)
  13. {
  14. if (now+l[i]>len) {ret++;now=l[i];}
  15. else now+=l[i];
  16. }
  17. return ret<=m;
  18. }
  19. void binary_search()
  20. {
  21. int l=mx,r=sums;
  22. while (l<=r)
  23. {
  24. int mid=(l+r)>>;
  25. if (check(mid)) {len=mid;r=mid-;}
  26. else l=mid+;
  27. }
  28. }
  29. void get_bnd()
  30. {
  31. int ret=,now=;
  32. for (int i=;i<=n;i++)
  33. {
  34. ret-=l[i-];
  35. while ((ret+l[now+]<=len) && (now+<=n))
  36. {
  37. now++;ret+=l[now];
  38. lb[now]=i;
  39. }
  40. }
  41. }
  42. void dps()
  43. {
  44. for (int i=;i<=n;i++) if (lb[i]==) dp[i][]=;
  45. for (int i=;i<=n;i++) sum[i][]=sum[i-][]+dp[i][];
  46. ans+=dp[n][];
  47. for (int i=;i<=m;i++)
  48. {
  49. for (int j=;j<=n;j++)
  50. {
  51. if (j<=i) {dp[j][i&]=sum[j][i&]=;continue;}
  52. if (lb[j]-) dp[j][i&]=(sum[j-][(i&)^]-sum[lb[j]-][(i&)^]+mod)%mod;
  53. else dp[j][i&]=sum[j-][(i&)^]%mod;
  54. sum[j][i&]=(sum[j-][i&]+dp[j][i&])%mod;
  55. }
  56. ans=(ans+dp[n][i&])%mod;
  57. }
  58. }
  59. int main()
  60. {
  61. scanf("%d%d",&n,&m);
  62. for (int i=;i<=n;i++) {scanf("%d",&l[i]);sums+=l[i];mx=max(mx,l[i]);}
  63. binary_search();
  64. get_bnd();
  65. dps();
  66. printf("%d %d\n",len,ans);
  67. return ;
  68. }

BZOJ 1044 木棍分割的更多相关文章

  1. BZOJ 1044 木棍分割 解题报告(二分+DP)

    来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...

  2. BZOJ 1044 木棍分割(二分答案 + DP优化)

    题目链接  木棍分割 1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3830  Solved: 1453[S ...

  3. 【BZOJ】【1044】【HAOI2008】木棍分割

    二分/DP 真是一道好题! 第一问很简单的二分…… 第二问一开始我想成贪心了,其实应该是DP的= = 然后没有注意……又MLE又TLE的……这题要对DP进行时空两方面的优化!! 题解:(by JoeF ...

  4. [BZOJ 1044] [HAOI2008] 木棍分割 【二分 + DP】

    题目链接:BZOJ 1044 第一问是一个十分显然的二分,贪心Check(),很容易就能求出最小的最大长度 Len . 第二问求方案总数,使用 DP 求解. 使用前缀和,令 Sum[i] 为前 i 根 ...

  5. BZOJ 1044: [HAOI2008]木棍分割(二分答案 + dp)

    第一问可以二分答案,然后贪心来判断. 第二问dp, dp[i][j] = sigma(dp[k][j - 1]) (1 <= k <i, sum[i] - sum[k] <= ans ...

  6. 1044: [HAOI2008]木棍分割

    1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2161  Solved: 779[Submit][Statu ...

  7. BZOJ 1044

    1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1393  Solved: 497[Submit][Statu ...

  8. BZOJ1044: [HAOI2008]木棍分割

    1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1580  Solved: 567[Submit][Statu ...

  9. bzoj1044[HAOI2008]木棍分割 单调队列优化dp

    1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4314  Solved: 1664[Submit][Stat ...

随机推荐

  1. ☀【canvas】直线 / 三角形 / 矩形 / 曲线 / 控制点 / 变换

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  2. 【转】ios中@class和 #import 的使用时机

    代码中会发现有部分#import操作写在m文件中,而h文件仅仅使用@class进行声明,为什么不直接把#import放到h文件中呢? 这是因为h文件在修改后,所有import该h文件的所有文件必须重 ...

  3. 【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!

    转自:http://blog.csdn.net/gqqnb/article/details/6412364 2012.1.24更新 增加了“安装方法” eclipse是一个程序开发平台,它本身并不限制 ...

  4. 计数方法,博弈论(扫描线,树形SG):HDU 5299 Circles Game

    There are n circles on a infinitely large table.With every two circle, either one contains another o ...

  5. HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Relative atomic mass Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  6. C# Get Desktop Screenshot ZZ

    I found this feature while looking inside Graphics class and since it was so simple to use, I decide ...

  7. Count Color POJ--2777

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32217   Accepted: 9681 Desc ...

  8. Android学习笔记(十四)方便实用的首选项-PreferenceActivity

    突然发现已经好多天没更新博客了,最近公司项目正在进行一个大跨度的重构,又碰上有新需求,一连好多天都是很晚才到家.其实这篇博文在草稿箱里面也存了很久了,本来想着不发了,不过感觉PreferenceAct ...

  9. Bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 dijkstra,堆,分层图

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1573  Solv ...

  10. javascrip中array使用

    一.测试数组长度是使用arr.length;(注:使用delete不会修改数组的length属性) 二.数组方法 1.join() Array.join()方法将数组所有元素都转化为字符串连接在一起, ...