#include<bits/stdc++.h>
using namespace std;

const int N = 210, M = 810, P = 400;

int f[N][25][M];
int p[N], d[N];
int res[N], cnt;
int n, m;

int main()
{
	int cntt = 0;
	while(cin >> n >> m, n || m)
	{
		for(int i = 1; i <= n; i++)
			cin >> p[i] >> d[i];
		
		cnt = 0;
		memset(f, -0x3f, sizeof f);
		f[0][0][P] = 0;
		
		for(int i = 1; i <= n; i++)
			for(int j = 0; j <= m; j ++)
				for(int k = 0; k < M; k++)
				{
					f[i][j][k] = f[i - 1][j][k];
					int v = k - (p[i] - d[i]);
					if(j - 1 >= 0 && v >= 0 && v <= 800)
						f[i][j][k] = max(f[i][j][k], f[i - 1][j - 1][v] + p[i] + d[i]);
				}
		
		int x = 0;
		while(f[n][m][P + x] < 0 && f[n][m][P - x] < 0) x ++;
		if(f[n][m][P + x] < f[n][m][P - x]) x = P - x;
		else x = P + x;
		
		int i = n, j = m;
		while(j)
		{
			if(f[i][j][x] == f[i - 1][j][x]) i --;
			else {
				res[ ++ cnt] = i;
				x -= p[i] - d[i];
				i--, j--;
			}
		}
		int sump = 0, sumd = 0;
		for(int i = 1; i <= cnt; i++)
		{
			sump += p[res[i]];
			sumd += d[res[i]];
		}
		
		cout << "Jury #" << ++ cntt << endl;
		cout << "Best jury has value " << sump <<" for prosecution and value " <<sumd<< " for defence:" << endl;
		sort(res + 1, res + 1 + cnt);
		for (int i = 1; i <= cnt; i ++ ) cout << ' ' << res[i];
		cout << endl << endl;
	}
	return 0;
}

0 条评论

目前还没有评论...