题目链接:1.小蓝的漆房 - 蓝桥云课 (lanqiao.cn)
本题只要是通过枚举的方法,算出涂成每一种颜色所需的天数,最后在所有天数中找出最小值(由题可知,最多只有60种颜色,所以可以尝试算出每种颜色所需的时间)。
代码注释有详细的解释……
程序代码:
package lanqiao;
import java.util.Scanner;
/**
* 2023/11/26
*/
public class lanqiao3272_小蓝的漆房 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int t=scan.nextInt();//样例个数
while (t-->0){
int n=scan.nextInt();//数组的个数
int k=scan.nextInt();//每天能刷的区间大小
int[] arr=new int[n];
for (int i=0;i<n;i++)
arr[i]=scan.nextInt();
int ans=n;//最大的结果是每个房子都重新刷了一遍
for (int i=1;i<=60;i++){//遍历每个颜色,最后选出最少天数
int res=0;//记录刷每一种颜色的所需要的天数
for (int j=0;j<n;j++){//遍历每一个房子,如果区间中有房子的颜色和要刷的颜色不同,就刷成相同的
if (arr[j]!=i){
j+=k-1;//是把k长度的区间减去,继续下一天
res++;
}
}
ans=Math.min(ans,res);//得到每一种颜色所需的天数中的最小值
}
System.out.println("小蓝涂漆最少的天数为:"+ans);
}
}
}
运行结果:
2
5 2
1 1 2 2 1
小蓝涂漆最少的天数为:1
6 2
1 2 2 3 3 3
小蓝涂漆最少的天数为:2
进程已结束,退出代码为 0