码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ4428 : [Nwerc2015]Debugging调试

时间:2016-03-17 02:01:13      阅读:357      评论:0      收藏:0      [点我收藏+]

标签:

设$f[i]$为最优策略下调试$i$行代码的时间,则:

$f[1]=0$

$f[i]=\min((j-1)\times p+f[\lceil\frac{i}{j}\rceil])+r$

意义为枚举printf语句的个数,然后尽量均分,并假设坏点在最大的段落里。

考虑记忆化搜索,注意到对于每个$i$来说只有$O(\sqrt{i})$个决策有用,所以时间复杂度为$O(n^\frac{3}{4})$。

 

#include<cstdio>
typedef long long ll;
int n,r,p,i;ll f[1000010];
inline void up(ll&a,ll b){if(a>b)a=b;}
ll F(int n){
  if(n<2)return 0;
  if(f[n])return f[n];
  ll t=1LL*n*p;
  for(int i=2;i<n;i=(n-1)/((n-1)/i)+1)up(t,1LL*i*p+F((n-1)/i+1));
  return f[n]=t+r-p;
}
int main(){
  scanf("%d%d%d",&n,&r,&p);
  return printf("%lld",F(n)),0;
}

  

BZOJ4428 : [Nwerc2015]Debugging调试

标签:

原文地址:http://www.cnblogs.com/clrs97/p/5285884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!