dp方程很简单:

f[i] = min{ f[i-j] } + stone[i]

但是数据10^9太大了,超时超空间,这样只能过30%

来自:http://blog.csdn.net/w19960702123/article/details/40478187

当我们看到10^9与100块石头,和s,t均小于等于10时,我们会想到有的石头间距可能大于t,即要跳好几步才会到达下一块石头的左右处。而我们会发现这些步数是无关紧要的,我们只需要把他们缩小,即在不影响最终结果的基础上mod一下t就行了。

但是为什么要mod t呢?首先,我们可以知道,青蛙最多跳t,由于两石块间的间距远大于t,且这之间没有石头,所以青蛙会以最大的t去走,至少是在第i块石头向后t个距离,到第i+1块向前t个距离处,它会一直跳的(其实不跳t也可以,但是我们想最优,所以青蛙在中间如何跳是无所谓的,那么我们就可以把它极限化,即取t)

解释完mod t,先一步就是推导如何计算了。

既然我们要缩短距离L(L=b[i]-b[i-1])那么我们就需考虑,是不是L的每一个点都能缩。我们利用极限的思想,青蛙跃过一个石头,最多也就到b[i-1]+t处(同理,最少会到b[i] - t ),即 b[i-1]+t 到 b[i] - t 间的距离要缩减。

综上,我们就可以得到一个公式a[i]=a[ i-1]+X , X=(b[i]-t-b[i-1]-t)%t (即缩点后的长度),但是我们怕X会小于t,这样会导致青蛙直接跳过这段距离,所以我们要再加t,即a[i]=a[ i-1]+(b[i]-b[i-1]-2*t)%t +t。

注意:

1.我们只有在L>t 时我们需要缩点

2.不要忘记排序

3.讨论s==t的情况

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int f[],a[],b[],stone[];
int L,s,t,m,ans;
int main()
{
cin>>L>>s>>t>>m;
for(int i=;i<=m;i++)cin>>a[i];
a[]=;
sort(a+,a+m+);
//特判
if(s==t){
for(int i=;i<=m;i++)if(a[i]%t==)ans++;
cout<<ans;
return ;
}
//压缩
a[m+]=L;
for(int i=;i<=m+;i++){
if(a[i]-a[i-]>t)
b[i]=b[i-]+(a[i]-a[i-]-*t)%t+t;
else b[i]=b[i-]+(a[i]-a[i-]);
// cout<<b[i]<<endl;
}
L=b[m+]; memset(stone,,sizeof(stone));
for(int i=;i<=m;i++)stone[b[i]]=;
f[]=;
for(int i=;i<=L+t-;i++)f[i]=0x3f3f3f3f;
//dp
for(int i=;i<L+t;i++)
for(int k=s;k<=t;k++)
if(i-k>=)f[i]=min(f[i-k]+stone[i],f[i]);
//ans
ans=0x3f3f3f3f;
for(int i=L;i<L+t;i++)ans=min(ans,f[i]);
cout<<ans; return ;
}

最新文章

  1. [转载]Bison-Flex 笔记
  2. localdb下载地址
  3. [C#基础]c#中的BeginInvoke和EndEndInvoke
  4. dll的编写和使用
  5. sql 语法
  6. HDU-4828 卡特兰数+带模除法
  7. windows中安装python
  8. [Buffalo]ASP.NET MVC路由映射
  9. Selenium2使用vncserver启动firefox
  10. 菜鸟级Git GitHub创建仓库
  11. Android开发者的Anko使用指南(四)之Layouts
  12. SVM(支持向量机)之Hinge Loss解释
  13. 查询每个分组中第N的一条记录
  14. RabbitMQ用户角色及权限控制(转)
  15. [arc102E]Stop. Otherwise...[容斥+二项式定理]
  16. jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间
  17. mapStateToProps,mapDispatchToProps的使用姿势
  18. bzoj 3926 转换+广义后缀自动机
  19. 【Alpha】阶段第五次Scrum Meeting
  20. [转]初试visual studio2012的新型数据库LocalDB 及 在visual studio2012中如何使用localDB具体讲解

热门文章

  1. guake terminal
  2. 简单实现MemCachedUtil
  3. sql server 多行合并一行
  4. 结构化日志类库 ---- Serilog库
  5. Android开发入门
  6. nginx防盗链配置
  7. sysbench 0.5使用手册
  8. 根据现有表操作基于active record的model
  9. iSCSI 协议
  10. (转)SqlServer为大数据量表建索引