アルゴリズムクラスの宿題-ナップサックアルゴリズムの答え

#include <stdio.h>

#define S_MAX_SIZE 100

// 选择排序算法,从大到小
void sort(int* a, int *b, int n)
{
    for(int i=0; i<n; i++)
    {
        int max_index=i;
        for(int j=i+1; j<n; j++)
        {
            if(a[j]>a[max_index])
                max_index=j;
        }
        if(max_index != i)
        {
            int temp = a[i];
            a[i] = a[max_index];
            a[max_index] = temp;
            temp = b[i];
            b[i] = b[max_index];
            b[max_index] = temp;
        }
    }
}



int main()
{
    /* write your code */
    int a, b;
    scanf( "%d %d", &a, &b );
    int v[S_MAX_SIZE];
    int m[S_MAX_SIZE];
    for(int i=0; i<a; i++)
    {
        scanf( "%d %d", &v[i], &m[i] );
    }
    sort(v,m,a);
    int sum=0;
    int spare_weight = b;
    for(int i=0; i<a;i++)
    {
        if(spare_weight == 0)
            break;
        if(m[i]<= spare_weight)
        {
            sum = sum + v[i]*m[i];
            spare_weight -= m[i];          
        }
        else if(m[i]>spare_weight)
        {
            sum = sum + v[i]*spare_weight;
            break;
        }   
    }
    printf( "%d", sum );
    return(0);
}

おすすめ

転載: blog.csdn.net/sazass/article/details/111148504