第一次写题解(三大校赛HJ的毕业设计)

博客讲述了作者通过模拟方法解决一个关于HJ在n天内完成毕业设计,最少需要休息多少天的问题。题目要求在前端、后端和娱乐之间合理安排时间,且不会连续两天做同一项工作。作者分享了代码实现,包括状态分析、数据处理和代码逻辑,并在最后表达了作为计算机小白的学习心得。
摘要由CSDN通过智能技术生成

题目

题目描述

逛完美丽的校园,HJ发觉自己还有毕业设计没有做完,苦逼的HJ准备了n天的时间来完成他的毕业设计,按他的设想, 计划中的时间将在课设前端,
课设后端, 娱乐, 这三件事中度过,;

他进行了项目排期, 他不会两天连续做前端或做后端, 只有当排期为第i天做前端时, 他才在第i天做前端, 当排期为第i天做后端时,
他才在第i天做后端, 他一天只能做一件事, 要么前端, 要么后端, 要么娱乐,;

现在随机生成n天计划的排期, 求HJ最少能娱乐几天。

输入

第一行一个整数 n, n(1≤n≤100000) 表示天数n;

第二行 n 个数 每个数为0或1,第 i 个数表示hj在第 i 天是否能做前端(1为能做前端, 0为不能做前端);

输出

一个整数, 表示hj最小娱乐天数。

提示

样例输入输出

输入
5
0 1 1 0 0
0 0 1 1 0

输出
3

解释

HJ可在第一天休息, 第二天做前端, 第三天或第四天做后端(第三天或第四天一天休息), 第五天休息, 最少休息三天。

题解

这题用动规 应该更好做,奈何俺不会,俺也听不懂,还是在师父的悉心指导与帮助下用模拟写出来了 .0_0.

题目分析

  1. 首先分析每一天的状态,细分的话每一天都有四个状态,00、01、10、11,假设分别为0、1、2、3,而每一天的状态都由前一天来决定,所以我们可以定义另一个数组来表示当天的状态。
  2. 对每天不同的状态进行模拟,假设今天的状态是1,那么就要分析前一天的状态,若前一天是1,那么今天就不能完成1状态的任务,这时今天就相当于是0状态,以此类推······总之就是根据前一天发生的事来确定今天发生的事

数据处理

  1. 要统计最少的娱乐天数,即统计最多的学习天数。
  2. 需要对第一天的情况单独讨论。
  3. 前面所说根据前一天的情况来确定今天的状态,那么如果今天原本的状态无法满足,就需要对数据进行处理,将其变成当天所表现出来的状态,例如,昨天是1,今天也是1,说明今天只能娱乐,那么就需将1变为0。同样的,如果昨天是2,今天是3,要求最大学习天数,那么今天就要变成1状态。

代码实现

#include<stdio.h>
int main(){
	int a[100000],b[100000],n,sum=0,i,c[100000];
	//定义数组c[100000],用来表示每天的状态 
	
	scanf("%d",&n);
	for( i=0; i<n; i++ ){
		scanf("%d",&a[i]);
	}
	for( i=0; i<n; i++{
		scanf("%d",&b[i]);
	}
	
	for( i=0; i<n; i++ ){
		if( !a[i]&&!b[i] ) c[i]=0;
		if( !a[i]&&b[i] ) c[i]=1;
		if( a[i]&&!b[i] ) c[i]=2;
		if( a[i]&&b[i] ) c[i]=3;
	}
		
	if( c[0]!=0 )  sum++; 
	
	for( i=1; i<n; i++){
		if( c[i]==1||c[i]==2 ) {
			if( c[i]==c[i-1] ) {
			    c[i]=0;
			}
			else sum++;
		}
		
		if( c[i]==3) {
			sum++;
			c[i]=3-c[i-1];
		} 
	}
		
	printf("%d",n-sum);
	
	return 0; 
}

写在最后

计算机小白的第一篇博客,啥也不会 .0_0. ,还望大佬们多多指教 .-_-.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clgmx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值