代码如下,现需要把运行的所有结果保存到txt文件中:
#include <iostream>
#include <fstream>
#define N 100
using namespace std;
int n,weight,p[N],w[N];//n,weight分别代表物品数量和背包载重量
//p[N],w[N]分别存放物品的价值和重量
//从文本文件里面读取背包信息
void ReadData()
{
ifstream ifs("input.txt",ios::in);
ifs>>n>>weight;
for (int i=1;i<=n;i++)
{
ifs>>w[i]>>p[i];
}
}
void OutputData()
{
ofstream outfile("output.txt",ios::ut);
}
int count=0;//时间复杂度计数
void Package()
{
int sp,sw,cw=weight;
int m[N][N];
for(int i=0;i<=weight;i++)
if(i>=w[n])
m[n][i]=p[n];
else
m[n][i]=0;
for (i=n-1;i>=1;i--)
{
for (int j=0;j<=weight;j++)
{
if(j>=w[i]&&m[i+1][j]<m[i+1][j-w[i]]+p[i])
{
m[i][j]=m[i+1][j-w[i]]+p[i];
count++;
}
else
m[i][j]=m[i+1][j];
}
}
cout<<"背包所装物品:"<<endl;
cout<<"i "<<"w(i) "<<"p(i) "<<endl;
for (sw=0,sp=0,i=1;i<=n-1;i++)
{
if (m[i][cw]>m[i+1][cw])
{
cw-=w[i];
sw+=w[i];
sp+=p[i];
cout<<i<<" "<<w[i]<<" "<<p[i]<<" "<<endl;
}
}
if (m[1][weight]-sp==p[n])
{
sw+=w[n];sp+=p[n];
cout<<i<<" "<<w[i]<<" "<<p[i]<<" "<<endl;
}
cout<<"装入背包的物品总重量:"<<sw<<endl;
cout<<"装入背包的物品总价值:"<<sp<<endl;
}
void main()
{
ReadData();
Package();
cout<<"模拟时间复杂度为:"<<count<<endl;
OutputData();
}