【解题报告】[动态规划]RQNOJ - PID82 / 又上锁妖塔

原题地址:http://www.rqnoj.cn/problem/82

解题思路:

  简单的动态规划

  状态表示:DP[i][0]表示当前在第i层,且当前跳跃状态不可用,此时消耗的最短时间。

         DP[i][1]表示当前在第i层,且当前跳跃状态可用,此时消耗的最短时间。

  状态转移方程:

      DP[i][0]=min(DP[i-1][1],DP[i-2][1]);
      DP[i][1]=min(DP[i-1][0],DP[i-1][1])+t[i-1];

  初始状态:

      DP[0][0]=INF

      DP[0][1]=0

解题代码:

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 int t[10005],n;
 5 int dp[10005][2];
 6 int min(int x,int y)
 7 {
 8     return x<y?x:y;
 9 }
10 int main()
11 {
12     int i;
13     cin>>n;
14     for(i=0;i<n;i++)
15     {
16         scanf("%d",&t[i]);
17     }
18     dp[0][1]=0;
19     dp[1][0]=0;
20     dp[1][1]=t[0];
21     for(i=2;i<=n;i++)
22     {
23         dp[i][0]=min(dp[i-1][1],dp[i-2][1]);
24         dp[i][1]=min(dp[i-1][0],dp[i-1][1])+t[i-1];
25         //printf("%d  %d\n",dp[i][0],dp[i][1]);
26     }
27     printf("%d\n",min(dp[n][0],dp[n][1]));
28     return 0;
29 }
View Code

 

posted on 2014-05-08 19:52  T^T  阅读(327)  评论(0编辑  收藏  举报

导航