初学ACM,问下口袋问题的算法(杭电2602)

为何不能把骨头的价值除以体积的数组排序(如价值5,体积1,价值除以体积就是5,放在double数组里,简称value),然后让value值高优先放入袋子中计算呢?(WRO... 为何不能把骨头的价值除以体积的数组排序(如价值5,体积1,价值除以体积就是5,放在double数组里,简称value),然后让value值高优先放入袋子中计算呢?(WRONG ANSWER了)
袋子问题的算法已经看过一下了,还没看明白,想先请教下这种方法错哪了,最好能举出特殊例子。感激不尽!(本人大一,请不要讲的那么深奥)

以下为代码:
#include<iostream>#include<string>#include<algorithm>#include<vector>#include<sstream>#include<cstring>#include<math.h>#include<stdio.h>#include<map>#include<set>using namespace std;
struct node{ int w; int v; double value;
bool operator <(const node& b) const { if(this->value != b.value) return (this->value)<(b.value); else return this->v>b.v; }};
int main(){ int T; scanf("%d",&T); while(T--) { int N,V; cin>>N>>V; node *nodes=new node[N];
for(int i=0;i<N;++i) { int temp; scanf("%d",&temp); nodes[i].w=temp; } for(int i=0;i<N;++i) { int temp; scanf("%d",&temp); nodes[i].v=temp; } double tempa,tempb; for(int i=0;i<N;++i) { tempa=(double)nodes[i].w; tempb=(double)nodes[i].v; if(tempb!=0) nodes[i].value=(tempa/tempb); else nodes[i].value=100000; }
sort(nodes,&nodes[N]); __int32 sum=0; for(int i=N-1;i>=0;--i) { if(nodes[i].v<=V) { sum+=nodes[i].w; V-=nodes[i].v; } } cout<<sum<<endl; delete[] nodes; } return 0;}
展开
 我来答
comesskywalker
2013-11-26 · TA获得超过4592个赞
知道大有可为答主
回答量:2391
采纳率:33%
帮助的人:1453万
展开全部
袋子容积为4,三块骨头分别:体积3价值15、体积2价值8、体积2价值8。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式