第5章实践
Posted ewerin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第5章实践相关的知识,希望对你有一定的参考价值。
实践问题:工作分配问题
问题描述:
有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。 输入格式: 输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。 输出格式: 将计算出的最小总费用输出到屏幕。
算法描述
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int p[100][100],sum,minn,i,j,n; bool b[100]; void dfs(int dep) { int r; for (r=1;r<=n;++r) if (!b[r]) { b[r]=1; sum+=p[r][dep]; if (dep==n) { if (sum<minn) minn=sum; } else if (sum<minn) dfs(dep+1); sum-=p[r][dep]; b[r]=0; } } int main() { scanf("%d",&n);//input people number and work number for (i=1;i<=n;++i) for (j=1;j<=n;++j) scanf("%d",&p[i][j]); sum=0; minn=10000;//赋值 dfs(1); printf("%d",minn);//output return 0; }
剪枝方法:
else if (sum<minn) dfs(dep+1); sum-=p[r][dep]; b[r]=0;
心得体会:对这个问题还是不是很了解,这不是一个好的代码,还是要加深体会
以上是关于第5章实践的主要内容,如果未能解决你的问题,请参考以下文章