c语言-宝物的选择

arthemis911222 2014-12-14 06:04:51
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int main()
{
int a[100],b[100];
double c[100],d[100],big=0;
int i,j,w,n;
scanf("%d%d",&w,&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
c[i]=b[i]/(a[i]*1.0);
d[i]=c[i];
}
sort(d,d+n-1);
for(i=n-1;i>=0;i--)
{
for(j=0;j<n;j++)
{
if(c[j]==d[i]&&w>0)
{
if(w>=a[j])
big=big+b[j];
else
big=big+c[j]*w;
w=w-a[j];
}
}
}
printf("%.2lf\n",big);
}


题目是:
小鱼儿在一次探险途中发现了一个山洞,并且在这个山洞里找到了宝藏,可是小鱼儿发现想要把宝藏全部带走是不可能的(因为他只带了一个袋子),不过很快他就发现每个宝物旁边都有几个字,上面写着宝物的体积和价值,而且这些宝物可以分割成任意大小。小鱼儿想知道如何选取宝物,才能使带走宝物的价值最大。

测试数据:
1000 100
79 1
71 45
97 37
18 48
99 12
17 91
15 87
78 55
4 12
22 74
49 70
100 50
92 15
63 13
55 79
42 26
25 100
57 32
76 45
41 16
89 46
3 35
36 48
82 80
71 21
82 91
65 23
13 39
40 41
76 5
78 98
73 61
54 76
72 57
63 56
59 16
51 85
21 100
20 98
10 47
37 60
32 22
37 98
91 60
93 95
61 69
24 25
89 18
23 63
54 68
74 18
23 51
85 32
24 42
98 41
52 80
22 33
20 20
38 77
40 80
71 8
23 46
95 10
98 100
11 72
25 87
70 43
86 54
67 74
3 20
11 73
98 94
21 60
45 77
15 70
94 55
90 58
88 20
61 67
76 100
98 96
63 7
54 43
41 45
46 13
24 71
44 30
13 61
22 9
28 24
96 23
98 7
27 36
45 78
14 82
70 70
52 77
62 3
43 95
77 67

2568.67
求教代码哪里错了?
...全文
837 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
arthemis911222 2014-12-25
  • 打赏
  • 举报
回复
还是不对
曾经最动心 2014-12-21
  • 打赏
  • 举报
回复
如果上面的是你的代码,我看出来一个问题,double类型不能用 == ,如果想用就得这样 fabs( c [ j ] - d[ i ] ) < 10e-8
arthemis911222 2014-12-15
  • 打赏
  • 举报
回复
不是背包问题,宝物可分割
Evankaka 2014-12-14
  • 打赏
  • 举报
回复
这是连续背包问题呀
arthemis911222 2014-12-14
  • 打赏
  • 举报
回复
其实题目我是做出来……我想知道,同样的想法为什么这个代码就错QAQ
LuckyBug 2014-12-14
  • 打赏
  • 举报
回复
struct shemmegui{
	int tiji;
	int jiazhi;
	double average;
};
#include<stdio.h>
int main()
{
	struct shemmegui t,a[100];
	struct shemmegui temp;
	int v,n,i,k;
	double m,max;
	scanf("%d%d",&v,&n);
	for(i=0;i<n;i++)
	{
		scanf("%d%d",&t.tiji,&t.jiazhi);
		t.average=t.jiazhi*1.0/t.tiji;
		a[i]=t;
	}
	for(i=0;i<n;i++)
	{
		for(k=0;k<n;k++)
		{
			if(a[k].average>a[i].average)
			{
				temp=a[k];
				a[k]=a[i];
				a[i]=temp;	
			}	
		}
	}
	m=0;
	max=0;
	for(i=0;i<n;i++)
	{
		if(a[i].tiji>v&&v>0)
		{
			m=m+a[i].average*v;
			v=0;
			if(m>max) max=m;	
		}
		if(a[i].tiji<=v&&v>0)
		{
			m=m+a[i].jiazhi;
			v=v-a[i].tiji;
			if(m>max) 
			{
				max=m;
			}			
		}
	}
	printf("%.2lf\n",max);
	return 0;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧