```cpp
#include<stdio.h>
#include<stdlib.h>
#include
#include
#define N 3
#define M 3
using namespace std;
int data[NM+1];
int opdata[NM+1];
int sum=0;//初始化为0
int fw[N];
int opw[N];
int opv[N];
struct item{
int weight;
int value;
float sv;
float rate;//使用率
}items[N*M+1];
item b;
void Rank(int array[], int start, int last)
{
int i = start;
int j = last;
int temp=array[i];
if (i < j)
{
while (i < j)
{
//
while (i < j && array[j]>= temp)
j--;
if (i < j)
{
array[i]= array[j];
i++;
}
while (i < j && temp > array[i])
i++;
if (i < j)
{
array[j] = array[i];
j--;
}
}
//把基准数放到i位置
array[i] = temp;
//递归方法
Rank(array, start, i - 1);
Rank(array, i + 1, last);
}
}
void Greedy(int c,int v[],int w[],int sv[])
{//贪心算法
Rank(sv,0,N-1);//重点注意是0-N-1而不是0-N
// for(int i=0;i<N;i++)
//{cout<<“我是排好的单位价值”<<sv[i]<<endl;
// }
for(int i=N-1;i>-1;i–)
{for(int j=0;j<N;j++)
{if(sv[i]==v[j]/w[j])//如果相等
fw[N-1-i]=w[j];//装到最终与单位价值相对应的哪个数组中去
}}
//for(int i=0;i<N;i++)
//{cout<<“我是最终重量”<<fw[i]<<endl;
// }
for(int i=0;i<N;i++)
{if(fw[i]<=c)//如果i物件的整体重量小于背包当前可承重量,就把他放进去
{items[i].rate=1;
sum+=sv[N-1-i]fw[i];
c-=fw[i];
// cout<<“我被装进去了”<<fw[i]<<“kg”<<endl;
opw[i]=fw[i];//被装入的重量
opv[i]=sv[N-1-i]fw[i];//被装入的价值
}
else if
(fw[i]>c&&c!=0)
{
//cout<<“fw[i]=”<<fw[i]<<“c=”<<c<<endl;
items[i].rate=c/float(fw[i]);
// cout<<“rate=”<<items[i].rate<<“我被装进去了”<<items[i].ratefw[i]<<“kg”<<endl;
// cout<<“最后一个单位价值:”<<sv[N-1-i]<<endl;
opw[i]=items[i].ratefw[i];//被装入的重量
opv[i]=items[i].rate*fw[i]sv[N-1-i];//被装入的价值
sum+=items[i].ratefw[i]*sv[N-1-i];
c-=opw[i];
// cout<<“目前总额:”<<sum;
}
else break;
}
}
int main()
{
int c;
int sv[N];//创建数组
int v[N];
int w[N];
FILE *fp=fopen(“output.txt”,“w”);
ifstream fileinput;
fileinput.open(“input.txt”);
for(int i=0;i<N*M+1;i++)
{
fileinput>>data[i];
//把txt文件中的数字全部放在data中
}
c=data[0];//例子中是把50赋值给C
for(int i=0;i<N;i++)
{
w[i]=data[2+M*i]; //赋值重量到w中
v[i]=data[3+M*i]; //赋值价值到v中
sv[i]=v[i]/w[i];//单位价值
// cout<<“我是单位价值:”<<sv[i]<<endl;
items[i].rate=0;//初始化每件物品的使用率
}
Greedy(c,v,w,sv);
cout<<“目前总额:”<<sum;
// for(int i=0;i<N;i++)
//{cout<<“单位价值:”<<sv[i]<<“重量:”<<fw[i];
//}
opdata[0]=sum;
for(int i=0;i<N*M+1;i++)
{opdata[1+M*i]=i+1;
opdata[2+M*i]=opw[i];
opdata[3+M*i]=opv[i];
}
// //存入txt文件中
for(int i=0;i<N*M+1;i++)
{
fprintf(fp,"%d",opdata[i]);
if(i0||i%30)
{fprintf(fp,"\n");
}
else
{fprintf(fp," ");
}
}
return 0;
}