某市政府非常关注民生,最近对民生问题作了调研,提出了最近要解决的n个民生问题,政府的专家顾问组有w人,每一个专家都有自己的特长,政府知道每专家能解决哪些问题,现在政府想知道至少请多少位专家,才能把所有的问题都解决?
解
DFS+优化。
如果一个专家可以解决的任务,某一个专家全都可以解决,那么删掉前面一个专家…如果某个任务只有一个专家可以解决,那么这个专家必然被选择。瞎搞。
代码
瞎几把优化,居然加起来有50行左右…
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int l[100], finish[100], n, w, ans, addd, T, ru[100], wo[100][100], L[100];
bool used[100], woo[100][100];
struct asdf{
int to, next;
} A[500];
void dfs(int d, int ss){
if(d == n+1){
ans = min(ans, ss);
return;
}
if(finish[d] >= 1){
int nexx = d+1;
while(finish[nexx] >= 1) ++nexx;
dfs(nexx, ss);
}
else{
for(int i = L[d]; i; i = A[i].next)
if(used[A[i].to