All pastes #58801 Raw Edit

Anonymous

public cpp v1 · immutable
#58801 ·published 2006-05-25 13:29 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>struct good{	int pr;	int w;	int n;	int index;	double prbw;};struct good* arr;int n,a,b;int* ans;struct good* orgarr;int compare(const void* a,const void* b){	double temp1,temp2;	temp1 = (((struct good*)a) ->prbw); 	temp2 = (((struct good*)b) ->prbw);		if(temp1 < temp2)		return 1;	else if(temp1 > temp2)		return -1;	else		return 0;}void findans(){	qsort(arr,n,sizeof(struct good),compare);	//fill knapsack	//capacity is b	int i = 0,j = 0;	long capacity = b;	for(i = 0;i < n;i++)	{		if(capacity <= 0)			break;		for(j = 1;j <= arr[i].n && capacity > 0;j++)		{			if(capacity - arr[i].w >= 0)			{				ans[arr[i].index] = j;				capacity -= arr[i].w;			}			else				break;		}	}}long findmaxpr(){	int i = 0;	long weight = 0;	long maxpr = 0;	for(i = 0;i < n;i++)	{		maxpr += (ans[i]*orgarr[i].pr);		weight += (ans[i]*orgarr[i].w);	}	if(weight < a)	{		printf("-1");		exit(0);	}	return maxpr;}int main(){	scanf("%d",&n);	scanf("%d",&a);	scanf("%d",&b);	arr = new struct good[n];	ans = new int[n];	orgarr = new struct good[n];	int i = 0;	for(i = 0;i < n;i++)	{		scanf("%d",&(arr[i].pr));		scanf("%d",&(arr[i].w));		scanf("%d",&(arr[i].n));		arr[i].index = i;		ans[i] = 0;		orgarr[i].index = i;		orgarr[i].n = arr[i].n;		orgarr[i].pr = arr[i].pr;		orgarr[i].w = arr[i].w;		arr[i].prbw = ((double)arr[i].pr / (double)arr[i].w);	}	long maxpr;	findans();	maxpr = findmaxpr();	printf("%ld",maxpr);		for(i = 0;i < n;i++)		printf("\n%d",ans[i]);	return 0;}