예제 #1
0
파일: knapre.c 프로젝트: gaurav594/programs
// Returns the maximum value that can be put in a knapsack of capacity W
int knapSack(int W, int wt[], int val[], int n)
{
   // Base Case
   if (n == 0 || W == 0)
       return 0;
 
   // If weight of the nth item is more than Knapsack capacity W, then
   // this item cannot be included in the optimal solution
   if (wt[n-1] > W)
       return knapSack(W, wt, val, n-1);
 
   // Return the maximum of two cases: (1) nth item included (2) not included
   else return max( val[n-1] + knapSack(W-wt[n-1], wt, val, n-1),
                    knapSack(W, wt, val, n-1)
                  );
}
예제 #2
0
int main()
{
    freopen("input.txt","r",stdin);
    int testcase;
    scanf("%d",&testcase);
    while(testcase--)
    {
        memset(ks,0,sizeof(ks));
        int prices[1001], weights[1001];
        int i,objects;
        scanf("%d",&objects);

        for(i=0; i<objects; i++)
            scanf("%d %d",prices+i,weights+i);
        int p , sum = 0, wt;
        scanf("%d",&p);
        for(i=0; i<p; i++)
        {
            scanf("%d",&wt);
            sum+=knapSack(wt,weights,prices,objects);
        }
        printf("%d\n",sum);
    }
    return 0;
}
예제 #3
0
int knapSack(int W, int wt[], int val[], int n)
{
    if (n == 0 || W == 0)
        return 0;

    if(ks[n][W])
        return ks[n][W];

    if (wt[n-1] > W)
        return ks[n][W] = knapSack(W, wt, val, n-1);


    else return ks[n][W] = max( val[n-1] + knapSack(W-wt[n-1], wt, val, n-1),
                         knapSack(W, wt, val, n-1)
                       );
}
예제 #4
0
int main()
{
    int val[] = {60, 100, 120};
    int wt[] = {10, 20, 30};
    int  W = 50;
    int n = sizeof(val)/sizeof(val[0]);
    printf("%d", knapSack(W, wt, val, n));
    return 0;
}
예제 #5
0
int main(){
	int a[]={10,20,30};
	int w=50;
	int val[]={60,100,120};
	int n=sizeof(a)/sizeof(a[0]);
	printf("\nMaximum profit is:%d",knapSack(a,val,n,w));
	printf("\n");
	return 0;
}
예제 #6
0
int main()
{
    int val[] = {1, 2, 3};
    int wt[] = {4, 3, 4};
    int  W = 10;
    int n = sizeof(val)/sizeof(val[0]);
    printf("%d", knapSack(W, wt, val, n));
    return 0;
}
예제 #7
0
int main()
{
    int val[] = {7, 8, 4};
    int wt[] = {3, 8, 6};
    int  W = 10;
    int n = sizeof(val)/sizeof(val[0]);
    printf("%d", knapSack(W, wt, val, n));
    return 0;
}
// Driver program to test above function
int main()
{

	int wt[] = {2, 3, 4, 5};
	int val[] = {3, 7, 2, 9};
	int W = 5;
	int n = sizeof(val)/sizeof(val[0]);
	printf("%d", knapSack(W, wt, val, n));
	return 0;
}
예제 #9
0
int main()
{
    scanf("%d %d",&W,&n);
    for(int i=0;i<n;i++)
    {
      scanf("%d %d",&wt[i],&val[i]);
    }
    printf("%d", knapSack(W, wt, val, n));
    return 0;


}
예제 #10
0
int main()
{   int n;
     scanf("%d",&n);
     int val[n],wt[n];
     for(int i=0;i<n;i++)
     scanf("%d",&val[i]);
     for(int i=0;i<n;i++)
     scanf("%d",&wt[i]);
    printf("%d", knapSack(W, wt, val, n));
    system("pause"); 
    return 0;
}