清华oj 69. 工作分配(Workload) 回溯法dfs【1】

本文探讨了如何通过深度优先搜索加剪枝策略,寻找最优的工作分配方案,以最小化完成n份工作的总时间。通过递归调用实现遍历所有可能的分配组合,并实时更新最优解。

 有 n 份工作要分配给 n 个人来完成,每个人完成一份。第 i 个人完成第 k 份工作所用的时间为一个正整数 tik,其中1 ≤ i, k ≤ n。试确定一个分配方案,使得完成这 n 份工作的时间总和最小。

输入

输入包含 n + 1 行。

第 1 行为一个正整数 n。

第 2 行到第 n + 1 行中每行都包含 n 个正整数,形成了一个 n × n 的矩阵。在该矩阵中,第 i 行第 k 列元素 tik 表示第 i 个人完成第 k 件工作所要用的时间。

输出

1 行,包含一个正整数,表示所有分配方案中最小的时间总和。

输入样例

5
9 2 9 1 9
1 9 8 9 6
9 9 9 9 1
8 8 1 8 4
9 1 7 8 9

输出样例

5

限制

1 ≤ n ≤ 15

1 ≤ tik ≤ 10^4

思路1 dfs+剪枝 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
#define MAX 16
int vist[MAX];
int d[MAX][MAX];
int n;
int minp=1000000;
void dfs(int cur,int curp)
{
	if(cur==n)
	{
	   if(curp<minp)
	   minp=curp;
	   //cout<<minp<<endl;
	   return;	
	}
	for(int i=0;i<n;i++)
	{
		if(vist[i]==false&&d[cur][i]+curp<minp)
		{
			vist[i]=true;
			dfs(cur+1,d[cur][i]+curp);
			vist[i]=false;
		}
	}
}
int main()
{
	
	cin>>n;
	for(int i=0;i<n;i++)
	 for(int j=0;j<n;j++)
	 {
 		cin>>d[i][j];
 	 }
 	dfs(0,0); 
 	cout<<minp<<endl;
}

 

### Java 编译与运行 OJ 系统中 `.class` 文件不存在解决方案 #### 1. 检查源代码路径和编译命令 确保在本地环境中使用的源代码路径以及编译命令正确无误。如果是在Eclipse或其他IDE中开发,则需确认项目结构设置合理,源文件位于正确的目录下[^1]。 ```bash javac -d . HelloWorld.java ``` 上述命令表示将编译后的`.class`文件放置于当前工作目录(`.`),并指定要编译的Java源文件为`HelloWorld.java`。 #### 2. 验证类名定义准确性 检查是否存在拼写错误或大小写不匹配的情况。例如,在给定的例子中: ```java // 错误版本 System.out.println("Hello World"); // 正确版本应改为如下所示: System.out.printLn("Hello World"); ``` 注意区字母大小写及方法名称书写规范性[^3]。 #### 3. 处理多文件依赖关系 当涉及多个相互关联的Java源文件时,务必保证所有必要的`.java`文件都已成功编译,并且生成的目标`.class`文件存在于预期位置。特别是对于嵌套内部类的情形,可能还需要额外处理其对应的`.class`文件命名规则变化问题[^4]。 #### 4. 清除缓存重新构建项目 有时由于环境配置不当或者残留旧版编译产物的影响,可能会导致新修改未能生效。此时建议清理整个项目的临时数据后再试一次完整的编译流程。 #### 5. 调整OJ平台提交方式 部在线评测系统(OJ)对上传代码有特定的要求,比如某些情况下只允许直接粘贴纯文本形式的源码而非附件压缩包等形式;另外还需留意是否有关于入口函数签名等方面的特殊规定。 #### 6. 排查输入/输出流相关异常 针对涉及到文件读写的场景,应当仔细审查所使用的I/O API调用逻辑及其参数传递情况,防止因资源未关闭等原因引发潜在隐患[^2]。 #### 7. 定位具体报错信息 面对诸如“找不到符号”的提示时,应该依据具体的上下文线索去定位实际发生的位置,进而针对性地修正相应变量声明等问题[^5]。 ```java BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = reader.readLine()) != null){ System.out.println(line); } reader.close(); ``` 以上代码展示了如何安全地从标准输入获取字符串直至结束标志出现为止,同时记得释放占用的外部连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值