#include <cstdio> #include <cstdlib> #include <memory> #include <algorithm> int f[30][1000]; int Path[30][1000]; int P[300]; int D[300]; int Answer[30]; int main() { int i,j,k; int t1,t2; int n,m; int nMinP_D; int nCaseNo; nCaseNo=0; scanf("%d%d",&n,&m); while(n+m) { nCaseNo++; for(i=1; i<=n; i++) scanf("%d%d",&P[i],&D[i]); memset(f,-1,sizeof(f)); memset(Path,0,sizeof(Path)); nMinP_D=___(1)___; ___(2)___; for(j=0; j<m; j++) { for(k=0; ___(3)___; k++) if (___(4)___) { for (i=1; i<=n; i++) if (___(5)___) { t1=j; t2=k; while(t1>0&&Path[t1][t2]!=j) { t2-=P[Path[t1][t2]]-D[Path[t1][t2]]; t1--; } if (t1==0) { f[j+1][k+P[i]-D[i]]=f[j][j]+P[i]+D[i]; Path[j+1][k+P[i]-D[i]]=i; } } } } i=nMinP_D; j=0; while (f[m][i+j]<0 && f[m][i-j]<0) j++; if(f[m][i+j]>f[m][i-j]) k=i+j; else k=i-j; printf("Jury #%d\n", nCaseNo); printf("Best jury has value %d for prosccution and value %d for delencen:\n",(k-nMinP_D + f[m][k]) /2, (f[m][k]-k + nMinP_D) / 2); for(i=1; i<=m; i++) { ___(6)___; k =- P[Answer[i]] - D[Answer[i]]; } std::sort(Answer + 1, Answer + m + 1); for(i= 1; i<= m; i++) printf(" %d", Answer[i]); printf("\n"); printf("\n"); scanf("%d%d", &n, &m); } return 0; }