`
gushuizerotoone
  • 浏览: 175576 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

(dp)MarblesRegroupingHard --bigraph mincost

J# 
阅读更多
MarblesRegroupingHard http://www.topcoder.com/tc?module=Static&d1=match_editorials&d2=srm387

抽象问题:bigraph mincost
         c1    c2    c3
box 1 = 140   90    63
box 2 = 73    142   70
box 3 = 79    142   7

bigraph可以抽象成矩阵问题,求最小流(要求每列要用一次并且仅此一次,行数>=列数)
上图的最小流如图所示:
         c1    c2    c3
box 1 = 140   90    63
box 2 = 73    142   70
box 3 = 79    142   7

转为dp问题:
从box3--->box2---->box1看, box3的求值取决于box2(box2取决于box1,递归求解),(box2求得值后+box3这一行的值),再比较即可得到最小值。看代码

链接中的题解opt(函数内)boxes应该是(total number of marles of color i) - boxes[j][i],即
         c1    c2    c3
box 1 = 140   90    63
box 2 = 73    142   70
box 3 = 79    142   7

而不是原来的boxes的值
opt(n, first m bits set to 1), n应该是numberOfColor-1,应为index是从0开始的


package srm387;

import java.util.Arrays;

public class MarblesRegroupingHard {
	int w[][];
	int dp[][] = new int[51][1 << 15];
	int numberColors;

	public int minMoves(String[] boxes) {
		for (int i = 0; i < dp.length; i++) {
			Arrays.fill(dp[i], -1);
		}
		String[] temp = boxes[0].split(" ");
		numberColors = temp.length;
		w = new int[boxes.length][numberColors];
		int[][] vals = new int[boxes.length][numberColors];
		for (int i = 0; i < boxes.length; i++) {
			String[] arr = boxes[i].split(" ");
			for (int j = 0; j < arr.length; j++) {
				//vals是原来的值,只是String的改为int的
				vals[i][j] = Integer.parseInt(arr[j]);
			}
		}

		//w是真正要求的bigraph流:(total number of marles of color i) - boxes[j][i]
		for (int i = 0; i < boxes.length; i++) {
			for (int j = 0; j < numberColors; j++) {
				for (int k = 0; k < boxes.length; k++) {
					if (k != i) {
						w[i][j] += vals[k][j];
					}
				}
			}
		}

		//index从boxes.length-1开始, (1 << numberColors) - 1代表有numberColors个位
		return opt(boxes.length - 1, (1 << numberColors) - 1);

	}

	//upto 是boxes的index,从numberColors-1到0, used代表还有多少颜色没赋到box里,used用bit思想
	public int opt(int upto, int used) {
		//如果越过0的边界到达-1
		if (upto == -1) {
			//如果颜色都已赋完,没有颜色赋给box,则返回0,已经ok,不需要cost.//否则此路不通,返回Max_value
			if (used == 0) {
				return 0;
			} else {
				return 1000000000;
			}
		}

		//如果已经计算过了,就不必要重新计算。这是memoization 的好处
		if (dp[upto][used] != -1) {
			return dp[upto][used];
		}

		//这个box不填颜色,直接赋给下一个index
		dp[upto][used] = opt(upto - 1, used);

		int t = 1000000000;
		for (int i = 0; i < numberColors; i++) {
			if ((used & 1 << i) != 0) {
				//clear used的第i位bit
				int used1 = used & ~(1 << i);
				//这个box填入颜色i,然后把第i位bit clear(因为第i位颜色已经在赋给了这个box),再传入下一个box
				t = w[upto][i] + opt(upto - 1, used1);
			}
			if (t == 1000000000) {
				continue;
			}
			if (dp[upto][used] > t) {
				dp[upto][used] = t;
			}
		}

		return dp[upto][used];
	}

	public static void main(String[] args) {
		MarblesRegroupingHard m = new MarblesRegroupingHard();
		String[] boxes = { "6 97 7", "73 45 0", "67 45 63" };
		int cost = m.minMoves(boxes);
		System.out.println(cost);
	}
}
分享到:
评论

相关推荐

    平原型生活垃圾填埋场扩容措施研究及应用_刘志刚.pdf

    平原型生活垃圾填埋场扩容措施研究及应用_刘志刚.pdf

    跨模型迁移指南:将OpenAI项目快速适配DeepSeekAPI.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    智能推荐系统实战:DeepSeekAPI在电商场景的个性化排序应用.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    成本控制秘籍:DeepSeekAPI计费机制与优化方案全解.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    Wallpaper Engine 壁纸一键提取

    Wallpaper Engine 是一款广受欢迎的动态壁纸软件,允许用户将各种动态、交互式壁纸应用到桌面上。其丰富的创意工坊内容让用户可以轻松下载和分享个性化的壁纸。而“一键提取”功能则是 Wallpaper Engine 中一个非常实用的工具,能够帮助用户快速提取和保存壁纸资源,方便后续使用或分享。

    性价比革命:DeepSeekAPI成本仅为GPT-4的3%的技术揭秘.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    本地部署DeepSeek模型:API调用与自有算力结合的混合架构设计.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    这是一份非常有意义的实习报告

    这是一份非常有意义的实习报告

    用Python玩转DeepSeek:代码生成接口的10个实战案例.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    爱华AIWA HS-J9磁带随身听维修服务手册 说明书电路原理图PCB图

    爱华AIWA HS-J9磁带随身听维修服务手册 说明书电路原理图PCB图

    从ChatGPT到DeepSeek:API迁移指南与参数映射对照表.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    房屋租赁合同[示范文本].doc

    房屋租赁合同[示范文本].doc

    智能体开发:将DeepSeekAPI集成到知识库系统的全流程.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    单片机 入门学习视频教程 自学资料

    单片机 入门学习视频教程 自学资料

    模型定制化实战:基于DeepSeek的行业术语微调教程.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    5个提升DeepSeekAPI生成质量的调参技巧,开发者必看!.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    参数调优手册:temperature和top_p对输出结果的影响实验.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    auto_gptq-0.5.1.tar.gz

    auto_gptq-0.5.1.tar.gz

    贪心算法7日速成:LeetCode经典题型+华为机考真题.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    结构体 struct关键字用来定义结构体

    结构体 struct关键字用来定义结构体

Global site tag (gtag.js) - Google Analytics