| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
dfs(超时) C++#include<iostream>
#include<stdlib.h>
#include<vector>
using namespace std;
int n, m, total=0;
int dx_min=-1, dx_max, d,p;
vector<vector<int> > judge;
vector<int>select,jury;
void dfs(int pi,int di, int dep)
{
for (int i = 0; i < n-m+dep+1; i++)
{
if (select.size()==0 || i>select.back())
if (!judge[i][2])
{
select.push_back(i);
pi += judge[i][0];
di += judge[i][1];
judge[i][2] = 1;
if (dep == m - 1)
{
if (dx_min == -1 || abs(di - pi) < dx_min)
{
dx_min = abs(di - pi);
dx_max = di + pi;
d = di;
p = pi;
jury.clear();
for (int j = 0; j<m; j++)
jury.push_back(select[j]);
}
if (abs(di - pi) == dx_min && (di + pi)>=dx_max)
{
dx_max = di + pi;
d = di;
p = pi;
jury.clear();
for (int j = 0; j<m; j++)
jury.push_back(select[j]);
}
}
if (dep < m - 1) dfs(pi, di, dep + 1);
select.pop_back();
pi -= judge[i][0];
di -= judge[i][1];
judge[i][2] = 0;
}
}
}
int main(void)
{
int di, pi;
vector<int> temp;
while (cin >> n >> m)
{
if (n + m == 0) break;
total++;
judge.clear();
select.clear();
dx_min = -1;
for (int i = 0; i < n; i++)
{
temp.clear();
cin >> pi >> di;
temp.push_back(pi);
temp.push_back(di);
temp.push_back(0);//标志位
judge.push_back(temp);
}
dfs(0, 0, 0);
cout << "Jury #" << total << endl;
printf("Best jury has value %d for prosecution and value %d for defence:\n", p,d);
for (int i = 0; i<m; i++)
cout<<" "<<jury[i]+1<<" ";
cout << endl << endl;
}
system("pause");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator