背包模板
01背包
- dp[j]记录当容量为j时的可行取法的最大价值
- 状态转移方程dp[j]=max(dp[j],dp[j-w[i]]+v[i])
- 注意内层循环为逆序
#include<stdio.h>
int dp[1005];
int main() {
int T,n,i,j,s,v[1005],w[1005];
scanf("%d", &T);//循环次数
while (T--) {
//商品件数、背包容量
scanf("%d %d", &n, &s);
//初始化
for (i = 0; i <= n; i++) {
dp[i]=0;
v[i]=0;
w[i]=0;
}
//价值、重量
for (i = 1; i <= n; i++) {
scanf("%d %d", &v[i],&w[i]);
}
for (i = 1; i <= n; i++) {
for (j = s; j >= 0; j--) {
//商品重量大于现在背包容量
if (w[i]>j)
dp[j] = dp[j];
//能装,看哪个大,选择装还是不装
else{
int value1 = dp[j-w[i]]+v[i];
int value2 = dp[j];
if(value1>value2)
dp