//AC自动机x
#include<iostream>
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<string>
#include<math.h>
using namespace std;
int
data[6][6]={{0,0,0,0,0,0},{0,13,11,10,4,7},{0,13,10,10,8,5},{0,5,9,7,7,4},{0,15,12,10,11,5},{0,10,11,8,8,4}};
int f[52];//数组f储存工作选择的方案
int g[52];//数组g存放最优的工作选择方案
bool p[6]={0};//数组p用于表示某项工作有没有被选择
int maxx=0;
int search(int,int);
int main()
{
search(1,0);
for (int i=1;i<=5;i++)
cout<<char(64+i)<<":J"<<g[i]<<" "; //输出各项工作安排情况
cout<<endl;
cout<<"max="<<maxx<<endl;
return 0;
}
int search(int r,int t)//r为第几个人
{
for (int i=1;i<=5;i++)
if (!p[i]) //判断第i项工作没人选择
{
f[r]=i; //第r个人,就选第i项工作
p[i]=1; //标记第i项工作被人安排了
t+=data[r][i]; //计算效益值
if (r<5) search(r+1,t);
else if (t>maxx) //保存最佳效益值
{
maxx=t;
for (int j=1;j<=5;j++)
g[j]=f[j]; //保存最优效益下的工作选择方案
}
t-=data[r][i]; //回溯
p[i]=0;
}
}
原文:http://www.cnblogs.com/zxqxwnngztxx/p/6607307.html