TopCoder SRM 589 Div2 第2题

来源:互联网 发布:ubuntu 启动 黑屏 u盘 编辑:程序博客网 时间:2024/05/18 07:13

类型:DP  难度:2

题意:一堆齿轮两两相邻排成一圈,给出每个齿轮旋转方向,齿轮首尾相连,即n个齿轮,0和n-1相邻,齿轮与左右相邻的齿轮方向都相反才能转动,去掉一个齿轮,左右齿轮不看成相邻,问至少去掉几个齿轮,才能保证剩余齿轮都能按照给定方向转动。齿轮方向用L,R表示。

 

分析:dp问题,用dp[i][0]存储去掉第i个齿轮,0到i总共去掉的齿轮数最小值,dp[i][1]表示不去掉第i个齿轮,0到i总共去掉的齿轮数最小值

递推公式:dp[i][0] = min(dp[i-1][0],dp[i-1][1])+1

若当前齿轮与前一个方向不同:dp[i][0] = min(dp[i-1][0],dp[i-1][1])

否则:dp[i][1] = dp[i-1][0]

最后min(dp[n-1][0],dp[i-1][1])即为所求

但是由于齿轮是首尾相连的,所以要考虑最后一个齿轮与第一个齿轮是否是相同方向,用f[i][0]记录dp[i][0]取最小值时,第1个齿轮是否被去掉;f[i][1]记录dp[i][1]取最小值时,第1个齿轮是否被去掉

最后,若最后一个和第一个方向相同且dp[n-1][1]取最小时第一个齿轮存在,则dp[n-1][1]++,即还需去掉第一个齿轮才能转动。

代码如下:

 

#include<string>#include<vector>#include<cstring>#include<map>#include<iostream>#include<algorithm>using namespace std;#define MIN(x,y) (x)<(y)?(x):(y)const int MAX = 55;class GearsDiv2{public:int dp[MAX][2];bool first[MAX][2]; int getmin(string Directions){memset(dp,0,sizeof(dp));memset(first,0,sizeof(first));int n = Directions.length();dp[0][0] = 1;dp[0][1] = 0;first[0][0] = 1;first[0][1] = 0;for(int i=1; i<n; i++){if(dp[i-1][0] < dp[i-1][1]){dp[i][0] = dp[i-1][0]+1;first[i][0] = first[i-1][0];}else if(dp[i-1][0] > dp[i-1][1]){dp[i][0] = dp[i-1][1]+1;first[i][0] = first[i-1][1];}else {dp[i][0] = dp[i-1][1]+1;first[i][0] = first[i-1][1] | first[i-1][0];}if(Directions[i]!=Directions[i-1]){dp[i][1] = dp[i][0] - 1;first[i][1] = first[i][0];}else{dp[i][1] = dp[i-1][0];first[i][1] = first[i-1][0];}}if(n>2){if(Directions[n-1]==Directions[0] && !first[n-1][1]){dp[n-1][1]++;}}return MIN(dp[n-1][0],dp[n-1][1]);}};

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾照扣了60多分怎么办 驾照被扣了12分怎么办? c1驾照记满12分怎么办 不交钱不让验房怎么办 中考考号忘了怎么办 高考考生号忘了怎么办 1岁宝宝吞了硬币怎么办 小孩吞了5角硬币怎么办 10小孩吞了硬币怎么办 小孩吞了5毛硬币怎么办 小孩把硬币吞了怎么办 高三数学成绩差怎么办 没交社保的工龄怎么办 购置税证明丢了怎么办 车登记证书丢了怎么办 车辆登记书丢了怎么办 车贷分期还完了怎么办 住宅70年到期后怎么办 在外地扣了12分怎么办 英语6级证书丢了怎么办 孩子腺样体肥大鼻子堵塞怎么办 孩子初中成绩太差怎么办 交违章罚单丢了怎么办 违章缴费单丢了,怎么办 违章处理单掉了怎么办 驾驶证被扣9分后怎么办 车子违章扣50分怎么办 车子扣了12分怎么办 大学把档案丢了怎么办 学校把档案丢了怎么办 高考考了200多分怎么办 高考报名号忘了怎么办 中考只考500分怎么办 档案自提了之后怎么办 冬天衣服上的毛怎么办 四维预约不上怎么办 交了订金后悔了怎么办 信而富认证失败怎么办 南京市民卡坏了怎么办 南京市民卡断了怎么办 义乌市民卡丢了怎么办