B - Vacations codeforces_698A
2017-08-17 16:15
232 查看
题意:Vasya有假期但是假期的每一天他主要有3件事要做0:休息 1:打比赛 2:去体育馆锻炼 3:既可以打比赛也可以训练。但是连着的两天不能都打比赛或者都去体育馆。
思路:在这可以有两种写法
第一:可以对每一天进行枚举然后通过题目要求确定今天要干嘛。
第二:dp的思想开一个dp【i】【j】数组表示第i天选择做j的最少休息天数(j = 0 ,1 ,
2)。看懂这里一定要。
//仔细理解一下 下面的两句话,一定要理解明白!!!
然后就可以得出状态转化方程:dp[i][0] = min( dp[i-1][0] , min( dp[i-1][1] , dp[i-1][2] ) ) + 1 , 第i天休息,前一天干什么都可以。
如果第i天可以做活动1,那么dp[i][1] = min( dp[i-1][0] , dp[i-1][2] ); 前一天不能做活动1 , 同理转移dp[i][2]
当然这个大神的思路很是明确。
下面我先贴上代码
第一种:
第二种:一定要理解好公式。
思路:在这可以有两种写法
第一:可以对每一天进行枚举然后通过题目要求确定今天要干嘛。
第二:dp的思想开一个dp【i】【j】数组表示第i天选择做j的最少休息天数(j = 0 ,1 ,
2)。看懂这里一定要。
//仔细理解一下 下面的两句话,一定要理解明白!!!
然后就可以得出状态转化方程:dp[i][0] = min( dp[i-1][0] , min( dp[i-1][1] , dp[i-1][2] ) ) + 1 , 第i天休息,前一天干什么都可以。
如果第i天可以做活动1,那么dp[i][1] = min( dp[i-1][0] , dp[i-1][2] ); 前一天不能做活动1 , 同理转移dp[i][2]
当然这个大神的思路很是明确。
下面我先贴上代码
第一种:
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #define N 105 using namespace std; int a ; int main() { int i; int n; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } for(i=1;i<=n;i++) { if(a[i]==3) { if(a[i+1]==1) a[i]=2; else if(a[i+1]==2) a[i]=1; } else if(a[i]==1) { if(a[i+1]==1) a[i+1]=0; else if(a[i+1]==3) a[i+1]=2; } else if(a[i]==2){ if(a[i+1]==2) a[i+1]=0; else if(a[i+1]==3) a[i+1]=1; } } int cnt=0; for(i=1;i<=n;i++) { if(a[i]==0) cnt++; } printf("%d\n",cnt); return 0; }第一种思想很容易理解好好看看代码就可以理解了
第二种:一定要理解好公式。
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #define N 105 #define inf 0x3f3f3f using namespace std; int dp [5],a ; int main() { int i; int n; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); memset(dp,inf,sizeof(dp)); for(i=0;i<=4;i++) { dp[0][i]=0; } for(i=1;i<=n;i++) { dp[i][0]=min(dp[i-1][0],min(dp[i-1][1],dp[i-1][2]))+1; if(a[i]==1) { dp[i][1]=min(dp[i-1][0],dp[i-1][2]); } else if(a[i]==2){ dp[i][2]=min(dp[i-1][0],dp[i-1][1]); } else if(a[i]==3) { dp[i][1]=min(dp[i-1][0],dp[i-1][2]); dp[i][2]=min(dp[i-1][0],dp[i-1][1]); } } int ans; ans=min(min(dp [0],dp [1]),dp [2]); printf("%d\n",ans); return 0; }
B - Vacations
相关文章推荐
- 【Codeforces Round 363 (Div 2) C】【简单DP】Vacations 一天运动 一天学习最少休息日数
- Codeforces Round #363 (Div. 2)->C. Vacations
- Codeforces Round #363 (Div. 2) C. Vacations
- Codeforces Round #363 (Div. 2) C. Vacations(DP 动态规划)
- Codeforces Round #363 (Div. 2) C. Vacations(DP)
- Codeforces Round #363 (Div. 2) C. Vacations(DP)
- Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) C DNA Evolution
- CF-Educational Codeforces Round 15-A-Maximum Increase
- Codeforces Round #423 (Div. 2) C. String Reconstruction
- Codeforces #332 Div2
- Codeforces Round #FF (Div. 2)C - DZY Loves Sequences
- Codeforces Round #105 (Div. 2) C 构造
- Codeforces Round #448 (Div. 2) C. Square Subsets
- Codeforces Round #FF (Div. 2/A)/Codeforces447A_DZY Loves Hash(哈希)
- Educational Codeforces Round 15
- Codeforces Round #332 (Div. 2) 599D Spongebob and Squares(数学)
- Codeforces Round #FF (Div. 2) A.DYZ Loves Hash
- Educational Codeforces Round 15(简单题)
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)C. Jury Marks
- codeforces B. Ralph And His Magic Field 数学题+快速幂