[编程挑战]彩色石子,仅供参考

本文探讨了一项编程挑战,涉及彩色石子的问题。挑战要求通过编程解决如何分配不同颜色的石子,以满足特定条件。文章可能涵盖算法设计、逻辑思维和问题解决策略。
摘要由CSDN通过智能技术生成


public class ColoredStoneTest {

	/**
	 * @param args
	 * 有一行彩色的棋子,每个棋子的颜色是k种颜色之一。
	 * 你不能改变棋子的顺序,但是可以移走一些棋子。
	 * 问至少移走多少个石子,才能使得两个同色的石子之间没有其他颜色的棋子?
	 *  输入格式: 多组数据,每组数据两行,第一行是两个整数n和k, 1<=n<=100, 1<=k<=5 
	 *  下一行是n个在[1..k]范围内的正整数,代表每个棋子的颜色。 输出格式: 
	 *  每组测试数据输出一行包含一个整数,表示至少移走的石子数。 
	 *  注:可以移走第2个第7个棋子
	 * 首先只是针对两种颜色来进行求解,使用动态规划算法。
	 */
	public static void main(String[] args) {
		int color = 2;
		int []colorArray = new int[]{1,2,1,1,1,2,2,1,1,2};
		System.out.println(colorStone(colorArray));
		
		
	}
	
	public static int colorStone(int []colorArray){
		
		int len = colorArray.length;
		
		//动态规范数组,储存计算结果
		int dynamic[][] = new int[len][len];
		
		//储存最后一个石头是否是最小移动石头中可能的一个,为0表示不是,1表示是可选,2表示必须是
		int lastStone[][] = new int[len][len];
		
		for(int i=0;i<len;i++){
			dynamic[i][i] = 0;
			if(i<len-1 && colorArray[i]==colorArray[i+1]){
				dynamic[i][i+1] = 0;
				lastStone[i][i+1] = 0;
			}else if(i<len-1 ){
				dynamic[i][i+1] = 1;
				lastStone[i][i+1] = 1;
			}
		}
		
		for(int j=2;j<len;j++){
			
			fo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值