关于#背包问题#的问题,如何解决?

大家好,有一个c语言相关的问题,想请求大家帮助。
在for循环中两组数据单独测试没问题,一起测试就有问题

题目

img

这是我的代码

//贪心策略-dotcpp3042-金银岛
//策略:背包问题
#include
void sort(float weight[],float value[],int n);
int main(void)
{
    int k;//用于记录有多少个测试组 
    scanf("%d",&k);
    int i;
    float count=0;//记录能够带走的最大价值 
    for(i=0;i//变量定义 
        int m,n;
        scanf("%d",&m);//最大承重
        scanf("%d",&n);//有n个物品
        float weight[n];//每一个物体的质量 
        float value[n];//对应物体的价值
        
        //数据获取
        int j;
        for(j=0;jscanf("%f %f",&weight[j],&value[j]);
         } 
         
        //数据处理-按照性价比(价值/质量)最大的排序
        sort(weight,value,n); 
//测试打印 
//        for(int i=0;i
//        {
//            printf("%f %f %f\n",value[i],weight[i],value[i]/weight[i]);
//        }
        //数据处理
        for(j=0;jif(weight[j]>m)
            {
                count+=value[j]/weight[j]*m;
                break;
            }
            else
            {
                count+=value[j];
                m-=weight[j];
            }
         } 
         printf("%.2f\n",count);
    }
    return 0;
 } 
 void sort(float weight[],float value[],int n)
 {
     for(int i=0;i-1;i++)
     {
         for(int j=i+1;jif(value[i]/weight[i]float temp=value[i];
                 value[i]=value[j];
                 value[j]=temp;
                 
                 temp=weight[i];
                 weight[i]=weight[j];
                 weight[j]=temp;
             }
         }
     }
 }

下面是两个单独测试的,一个是整体测试的

img

img

img

参考一下,可行的话 还请点击 采纳:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXN 105
#define MAXW 10005
#define max(a, b) (a > b ? a : b)

int n, m;
double f[MAXW];

typedef struct node {
    int w;
    double v;
} Node;

Node a[MAXN];

double zero_one_pack(int w, int i) {
    if (i == n) return 0;
    if (w >= a[i].w) {
        return max(zero_one_pack(w - a[i].w, i + 1) + a[i].v, zero_one_pack(w, i + 1));
    } else {
        return zero_one_pack(w, i + 1);
    }
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        memset(f, 0, sizeof f);
        scanf("%d%d", &m, &n);
        for (int i = 0; i < n; i++) {
            scanf("%d%lf", &a[i].w, &a[i].v);
            a[i].v = a[i].v / a[i].w;
        }
        printf("%.2lf\n", zero_one_pack(m, 0) * m);
    }
    return 0;
}