大家好,有一个c语言相关的问题,想请求大家帮助。
在for循环中两组数据单独测试没问题,一起测试就有问题
题目
这是我的代码
//贪心策略-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;
}
}
}
}
下面是两个单独测试的,一个是整体测试的
参考一下,可行的话 还请点击 采纳:
#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;
}