由于业绩优秀,公司给小Q放了 n 天的假,身为工作狂的小Q打算在在假期中工作、锻炼或者休息。他有个奇怪的习惯:不会连续两天工作或锻炼。只有当公司营业时,小Q才能去工作,只有当健身房营业时,小Q才能去健身,小Q一天只能干一件事。给出假期中公司,健身房的营业情况,求小Q最少需要休息几天。
输入描述:
第一行一个整数 表示放假天数
第二行 n 个数 每个数为0或1,第 i 个数表示公司在第 i 天是否营业
第三行 n 个数 每个数为0或1,第 i 个数表示健身房在第 i 天是否营业
(1为营业 0为不营业)
输出描述:
一个整数,表示小Q休息的最少天数
输入例子1:
4
1 1 0 0
0 1 1 0
输出例子1:
2
例子说明1:
小Q可以在第一天工作,第二天或第三天健身,小Q最少休息2天
import java.util.Scanner;
public class _2020_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int N =sc.nextInt();
int[] w=new int[N];
int[] p=new int[N];
for(int i=0;i<N;i++)
w[i]=sc.nextInt();
for(int i=0;i<N;i++)
p[i]=sc.nextInt();
int[][] dp=new int[N][3];
for(int i=0;i<N;i++)
for(int j=0;j<3;j++)
dp[i][j]=Integer.MAX_VALUE;
for(int i=0;i<N;i++){
if(i==0){
if(w[i]==1)
dp[i][1]=0;
if(p[i]==1)
dp[i][2]=0;
dp[i][0]=1;
}else{
if(w[i]==1)
dp[i][1]=Math.min(dp[i-1][0],dp[i-1][2]);
if(p[i]==1)
dp[i][2]=Math.min(dp[i-1][0],dp[i-1][1]);
dp[i][0]=Math.min(Math.min(dp[i-1][0],dp[i-1][1]),dp[i-1][2])+1;
}
}
System.out.println(Math.min(Math.min(dp[N-1][0],dp[N-1][1]),dp[N-1][2]));
}
}