走楼梯的变形题目,多加一维记录当前是否使用了超能力即可,注意i=0和1时的初始化
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10,INF=0x3f3f3f3f;
int a[N];
int f[N][2];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
f[1][0]=a[1]; //在第一层,当前没有使用超能力
f[1][1]=0; //也可以不写,全局变量默认
f[0][0]=0;
f[0][1]=0;
for(int i=2;i<=n;i++){ //从2开始循环,初始化考虑0和1即可
f[i][0]=min(f[i-1][0],f[i-1][1])+a[i]; //当前没有使用超能力,显然只能从上一层转移过来
f[i][1]=min(f[i-1][0],f[i-2][0]); //使用了超能力,只能从前两行转移过来,且前两行没使用超能力
}
cout<<min(f[n][0],f[n][1])<<endl;
}