整数n,代表楼的高度。
接下来n行每行一个整数ai,代表i层的楼层高度(ai <= 100)。 输出格式 输出1行,包含一个整数,表示所需的最短时间。 样例输入 5 3 5 1 8 4 样例输出 1 数据规模和约定 对20%的数据,n<=10 对40%的数据,n<=100 对60%的数据,n<=5000 对100%的数据,n<=10000
递推:dp[i][0]=min(dp[i-1][0],dp[i-1][1])+arr[i]; dp[i][1]=min(dp[i-1][0],dp[i-2][0]);
#include<stdio.h> #include<algorithm> #include<string.h> #include<iostream> #include<math.h> #include<vector> using namespace std; int main() { int arr[10007]; int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&arr[i]); } int dp[10007][2];//第二个下标为0表示上一步是走到第i成上的,下标为1 反之亦然 //初始化 dp[0][0]=0; dp[0][1]=0; dp[1][0]=arr[1]; dp[1][1]=0; dp[2][1]=0; for(int i=2;i<=n;i++) { dp[i][0]=min(dp[i-1][0],dp[i-1][1])+arr[i]; dp[i][1]=min(dp[i-1][0],dp[i-2][0]); } if(dp[n][0]>dp[n][1]) { swap(dp[n][0],dp[n][1]); } printf("%d",dp[n][0]); return 0; }