码迷,mamicode.com
首页 > 其他好文 > 详细

CodeForces 698A - Vacations (Codeforces Round #363 (Div. 2))

时间:2016-07-24 22:17:30      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

要么去体育馆,要么去比赛,要么闲在家里

给出每一天体育馆和比赛的有无情况,要求连续两天不能去同一个地方

问最少闲几天

DP方程很容易看出

  dp(第i天能去的地方) = min(dp(第i-1天的三种情况)) ;

  dp(第i天呆在家里) = min(dp(第i-1天的三种情况))+1;

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 #define inf 0x3f3f3f3f
 5 int a[105],ans[105][3],n;
 6 void dfs()
 7 {
 8     ans[0][0]=ans[0][1]=ans[0][2]=0;
 9     for(int i=1;i<=n;i++)
10     {
11         if(a[i]==0)
12         {
13             ans[i][1]=inf;
14             ans[i][2]=inf;
15         }
16         else if(a[i]==1)
17         {
18             ans[i][1]=inf;
19             ans[i][2]=min(ans[i-1][0],ans[i-1][1]);            
20         }
21         else if(a[i]==2)
22         {
23             ans[i][2]=inf;
24             ans[i][0]++;
25             ans[i][1]=min(ans[i-1][0],ans[i-1][2]);                
26         }
27         else
28         {
29             ans[i][2]=min(ans[i-1][0],ans[i-1][1]);
30             ans[i][1]=min(ans[i-1][0],ans[i-1][2]);        
31         }
32         ans[i][0]=min(ans[i-1][0],ans[i-1][1]);
33         ans[i][0]=min(ans[i][0],ans[i-1][2]);
34         ans[i][0]++;
35     }
36 }
37 int main()
38 {
39     scanf("%d",&n);
40     for(int i=1;i<=n;i++)
41     {
42         scanf("%d",&a[i]); 
43     }
44     dfs();
45     int res=min(ans[n][0],ans[n][1]);
46     res=min(res,ans[n][2]);
47     printf("%d\n",res);
48 }

 

CodeForces 698A - Vacations (Codeforces Round #363 (Div. 2))

标签:

原文地址:http://www.cnblogs.com/nicetomeetu/p/5701564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!