只有两种物品,想到了贪心,将价值与体积比大(称为价值比)的优先放入。但体积限制,这样还不可以,会有剩余空间,使得这样的贪心策略并不是最优的,下面是写的贪心的WA代码:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int main()
{
// freopen("out.txt","w",stdout);
int n,kase = 0;
cin>>n;
while(n--)
{
printf("Case #%d: ",++kase);
long long v,s1,v1,s2,v2;
cin>>v>>s1>>v1>>s2>>v2;
double e1 = v1*1.0/s1,e2 = v2*1.0/s2;
if(fabs(e1 - e2) <= 1e-6) //等单位价值
{
if(s1 < s2)
cout<<(long long)((v - v%s1)/s1*v1);
else cout<<(long long)((v - v%s2)/s2*v2);
}
else
{
if(e1 >= e2) //第一个单位价值高
cout<<(long long)((v - v%s1)/s1*v1 + (v%s1-(v%s1)%s2)/s2*v2);
else
cout<<(long long)((v - v%s2)/s2*v2 + (v%s2-(v%s2)%s1)/s1*v1);
}
printf("\n");
}
return 0;
}
好吧 ,我承认我看题解还没看懂,放一放以后再做吧