贪心求部分背包(结构体使用)
前几天写的背包在按照单位质量价值进行排序的时候,得把质量和价值也一起排了,觉得那个方法笨笨哒,今天睡醒了午觉突然想起结构体应该能解决这个问题,正好也学学结构体~~然后新的代码就出炉啦~
当当当~
/*
贪心解部分背包问题
用到结构体
*/
#include<iostream>
#define N 3
using namespace std;
struct Knaps{
double w;//单个背包总质量
double p;//单个背包总价值
double v;//单个背包单位质量价值
int num;//记录是第几个背包
};
int main()
{
double m = 50;//背包总重量
double sum = 0;//获取总价值量
Knaps knaps[N];
for(int i = 0; i < N; i++)
{
cout << "请输入背包的重量和价值:" << endl;
cin >> knaps[i].w >> knaps[i].p;
knaps[i].v = (double)knaps[i].p / knaps[i].w;
knaps[i].num = i + 1;
}
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N - i - 1; j++)
{
if (knaps[j+1].v < knaps[j].v)
{
Knaps temp = knaps[j+1];
knaps[j+1] = knaps[j];
knaps[j] = temp;
}
}
}
int i;
for( i = N - 1; i >= 0; i--)
{
if(knaps[i].w <= m)
{
sum += knaps[i].p;
cout << "获取1个第" << knaps[i].num << "个背包" << endl;
m -= knaps[i].w;
}
}
if(m > 0)
{
sum += knaps[i].v * m;
cout << "获取" << (double)m / knaps[i].w << "个第" << knaps[i].num << "个背包" << endl;
}
cout << "背包装满后总的价值为:" << sum << endl;
return 0;
}
恩恩,结构体还蛮有用哒~就是每次测试的时候要重新输入测试样例好烦啊,接下来得学学怎么读文件了,这样就可以节省好多时间,啦啦啦