Luogu 2800

来源:互联网 发布:阿里云服务器续费 编辑:程序博客网 时间:2024/05/19 22:03

dp入门题

题目:https://www.luogu.org/problemnew/show/2800
  • 先说一下思路:一共有3种方式来到达当前这层
  • 第一种直接从i-1层到达i;
  • 第二种是从i-2层跳一次再使用法力(跳一层)到达当前这层;
  • 第三种是从i-3层跳一次再使用法力(跳二层)到达当前这层;
  • 于是转移方程就出来了
  •    f[i]=min(min(f[i-1]+v[i],f[i-2]+a[i-1]),f[i-3]+a[i-2]);
  • #include<iostream>#include<cstdio>#include<cstdlib>const int MAXN=10000300;using namespace std;int n,v[MAXN],f[MAXN];int main(){//freopen("2800.in","r",stdin);//reopen("2800.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++) {scanf("%d",&v[i+3]);}for(int i=4;i<=n+3;i++)//为了避免Re循环改了一下 {f[i]=min(min(f[i-3]+v[i-2],f[i-2]+v[i-1]),f[i-1]+v[i]);}printf("%d",f[n+3]);return 0;}



原创粉丝点击