请记住一件事:(和这题无关)01背包的核心C++代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
ifstream in("beibao0.in");
ofstream out("beibao0.out");
int n,c;
int w[1001];//重量:付出的代价:包子
float v[1001];//价值:得到的利润:挣钱
float f[1001][5000];//f[i][j]表示前i件物品总重量为j的
//int ya[5000];//压缩后只剩下重量j
void read()
{
int i,j,k;
in>>n;
for(i=1;i<=n;i++)//单行读入重量
in>>w[i];
for(i=1;i<=n;i++)//等重量读完,再读价值
in>>v[i];
in>>c;//读入总重量:总包子数
//边界:前0件物品总重量
for(i=0;i<=n;i++)//表示重量
f[0][i]=0;
//总重量是0,一共有0:--n
//for(i=0;i<=n;i++)//i表示物品最大到n
//f[i][0]=0;
//友情提示:以上两条语句可以不写 ,因为全局变量默认都是0
//0件物品,重量是0都写过了
for(i=1;i<=n;i++)//前i件物品
for(j=1;j<=c;j++)//总重量为j
{
f[i][j]=f[i-1][j];
if(j>=w[i]&&f[i][j]<f[i-1][j-w[i]]+v[i])
f[i][j]=f[i-1][j-w[i]]+v[i];
}
out<<f[n][c]<<endl;
```
by ‘装逼之王’ @ 2017-10-30 20:44:39