跳房子是小朋友玩的游戏。地面上画出一连串格子,每个格子里有一个整数,小朋友从外面跳入格子,并继续往前跳,直到跳出所有格子。每次跳跃的规则是,可以跳入下一格或下下格或下下下格。怎么跳能让落脚格子里的数的累加和最小。
输入格式:
第一行输入格子数 n (1<n<100),第二行输入从起点处到终点处每个格子里的数,该数小于10。
输出格式:
输出最小累加和。
输入样例:
在这里给出一组输入。例如:
4
3 3 2 5
输出样例:
在这里给出相应的输出。例如:
2
思路:看代码
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
//#define L 110
int main()
{
int n;//格子数
int a[100];//记录每个各自的数字
int v[100];//记录从起点到第i个格子需要的最少数
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
v[0]=a[0];
v[1]=a[1];//v[1]=min(a[1],(a[0]+a[1]));
v[2]=a[2];//v[1]=min(a[2],a[0]+a[2],a[1]+a[2]);
for(int i=3;i<n;i++)//从第四个格子开始逐一计算,每个格子有三种情况到达,上,上上,上上上
{
v[i]=a[i]+min(v[i-1],min(v[i-2],v[i-3]));
}
cout<<min(v[n-1], min(v[n-2],v[n-3]));//跳出的最小
return 0;
}