动态规划和贪心中的五个背包问题,收集并整理出来放在这里。
0/1背包问题
0/1背包问题是一道动规的题,其题目意思就是每样物品只能取一个。二维表格中概括来说是上面位置的数&&上面的位置减物品质量这个数值后这个位子上的数加物品的价值比较哪个大,这里为了方便都转换为一维数组来做。(一样的)
#include <iostream>
using namespace std;
int dp[100];
int main()
{
int n;
int m;
cin>>m>>n;
int w[100];
int c[100];
for (int i=1;i<=n;i++)
{
cin>>w[i]>>c[i];
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (j>=w[i])
{
dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
}
}
}
cout<<dp[m];
return 0;
}
其中w[]是体积,c[]是价值。
完全背包问题
完全,也就是物品可以取无限件。没什么差别,只是表格横向不一样(从小到大,从当前体积开始)
#include <bits/stdc++.h>
using namespace std;
int dp[1090];
int main()
{
int n;
int v;
cin>>n>>v;
int n1[1000];
int v1[1000];
for (int i