| ||||||||||
| 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 | |||||||||
怎么wa了 数据都过了啊 3维dp2维的都理解了 自己根据其中思想写出的这个3维
#include<iostream>
#include<math.h>
#include<map>
#include<algorithm>
using namespace std;
struct People_Code
{
int P_doit;
int D_doit;
int index;
int sub_data;
int sum_data;
};
People_Code doits[200];
int Dp_data[21][801][21] = {};
int m, n;
void refresh_data(People_Code &code)
{
code.sub_data = code.P_doit-code.D_doit;
code.sum_data = code.P_doit + code.D_doit;
}
int main()
{
int cur_case = 0;;
while ((cin >> n >> m) && m && n)
{
cur_case++;
People_Code code;
memset(Dp_data, -1, sizeof(int) * 21 * 801 * 20);
Dp_data[0][400][0] = 400;
for (int i = 0; i < n; i++)
{
cin >> code.P_doit >> code.D_doit;
code.index = i + 1;
refresh_data(code);
doits[i] = code;
}
for (int i = 0; i < m; i++)
{
int j = 400 - (20 * i);
for (; j <= 400 + 20 * i; j++)
{
if (Dp_data[i][j][0] < 0)
{
continue;
}
for (int k = 0; k < n; k++)
{
bool contain = false;
for (int p = 1; p <= i; p++)
{
if (Dp_data[i][j][p] == doits[k].index)
{
contain = true;
}
}
if (contain)
{
continue;
}
int temp_sub_sum = j + doits[k].sub_data;
if (Dp_data[i + 1][temp_sub_sum][0] < Dp_data[i][j][0] + doits[k].sum_data)
{
Dp_data[i + 1][temp_sub_sum][0] = Dp_data[i][j][0] + doits[k].sum_data;
for (int p = 1; p <=i; p++)
{
Dp_data[i + 1][temp_sub_sum][p] = Dp_data[i][j][p];
}
Dp_data[i + 1][temp_sub_sum][i + 1] = doits[k].index;
}
}
}
}
int value_index = 0;
for (; value_index < 20 * m; value_index++)
{
if (Dp_data[m][400 + value_index][0] > 0 || Dp_data[m][400 - value_index][0] > 0)
{
if (Dp_data[m][400 + value_index][0] < Dp_data[m][400 - value_index][0])
{
value_index = -value_index;
}
break;
}
}
int sum_p = (Dp_data[m][400 + value_index][0] + value_index - 400) / 2;
int sum_d = (Dp_data[m][400 + value_index][0] - value_index - 400) / 2;
cout << "Jury #" << cur_case << endl;
cout << "Best jury has value " << sum_p << " for prosecution and value " << sum_d << " for defence:" << endl;
sort(Dp_data[m][400 + value_index] + 1, Dp_data[m][400 + value_index] + m + 1);
for (int i = 1; i <= m; i++)
{
cout << " " << Dp_data[m][400 + value_index][i];
}
cout << endl << endl;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator