Codeforces 698A. Vacations (简单DP)
2016-07-20 10:48
471 查看
题目链接
0-不能运动 不能写代码
1-可以运动 不能写代码
2-不能运动 可以写代码
3-可以运动 可以写代码
不能连续两天运动或连续两天写代码。
问最少的休息天数
dp[i+1][0]=min(min(dp[i][0],dp[i][1]),dp[i][2])+1;dp[i+1][1]=min(dp[i][0],dp[i][2]);dp[i+1][2]=min(dp[i][0],dp[i][1]);
最后的答案就是min(dp[n][0],dp[n][1],dp[n][2])
题意
每天有四种状态0-不能运动 不能写代码
1-可以运动 不能写代码
2-不能运动 可以写代码
3-可以运动 可以写代码
不能连续两天运动或连续两天写代码。
问最少的休息天数
思路
dp[i][k] 代表第i天干第k种事的最小休息天数,如果当天不能干该种事情,则置为inf,剩下的转移方程为dp[i+1][0]=min(min(dp[i][0],dp[i][1]),dp[i][2])+1;dp[i+1][1]=min(dp[i][0],dp[i][2]);dp[i+1][2]=min(dp[i][0],dp[i][1]);
最后的答案就是min(dp[n][0],dp[n][1],dp[n][2])
代码
#include <bits/stdc++.h> using namespace std; const int maxn = 1e2+10; const int inf = 1e9+7; int dp[maxn][4]; int day[maxn]; int main(){ int n; cin >>n; for(int i = 0 ; i < n ; i ++){ scanf("%d",day +i); } for(int i = 0 ; i < n ; i ++){ if(day[i] == 0){ dp[i+1][0] = min(min(dp[i][0],dp[i][1]),dp[i][2 9aa0 ])+1; dp[i+1][1] = inf; dp[i+1][2] = inf; } if(day[i] == 1){ dp[i+1][0] = min(min(dp[i][0],dp[i][1]),dp[i][2])+1; dp[i+1][1] = inf; dp[i+1][2] = min(dp[i][0],dp[i][1]); } if(day[i] == 2){ dp[i+1][0] = min(min(dp[i][0],dp[i][1]),dp[i][2])+1; dp[i+1][1] = min(dp[i][0],dp[i][2]); dp[i+1][2] = inf; } if(day[i] == 3){ dp[i+1][0] = min(min(dp[i][0],dp[i][1]),dp[i][2])+1; dp[i+1][1] = min(dp[i][0],dp[i][2]); dp[i+1][2] = min(dp[i][0],dp[i][1]); } } printf("%d",min(min(dp [0],dp [1]),dp [2])); }
相关文章推荐
- java String的intern方法
- http://blog.csdn.net/akon_vm/article/details/7429245
- Visual Object Tracking using Adaptive Correlation Filters (MOSSE)论文笔记
- 根据身份证号,获取出生年月日,年龄,性别
- 【可视化必备】大数据时代的可视化工具
- opencv-漫水填充
- Jmeter教程索引贴
- 隐含马尔可夫模型
- HDOJ--2098分拆素数和
- Android百度地图(五)打包apk发给好友不显示
- 会话固定攻击简单说明
- 欢迎使用CSDN-markdown编辑器
- UVA 11044-Searching for Nessy
- Glide
- Android开发 二级筛选,常见的省市筛选问题
- codeforces 699D Fix a Tree
- Leetcode 374. Guess Number Higher or Lower (Easy) (cpp)
- CC版本添加 LUCI
- 集合框架五(hashCode 与Collections)
- ReactNative Demo - NavigationView 使用