社区讨论

请教有关c++

学术版参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo14cj6o
此快照首次捕获于
2023/10/22 14:59
2 年前
此快照最后确认于
2023/11/02 14:31
2 年前
查看原帖

自学c++有些难,请教大佬!

关于01背包问题,我有些看不懂:

例题:
一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的中量分别是W1,W2...Wn,它们的价值分别为C1,C2...Cn,求旅行者能获得最大价值。
输入:
第一行:两个正整数M(背包容量)和N; 第二行至N+1行:Wi和Ci;
输出:
最大价值
我知道真是最简单的,可是我下面的代码看不太懂,想求解
CPP
#include<bits/stdc++.h>
using namespace std;
counst int maxm=201,maxn=31;//这里为什么要设数?
int m,n;
int w[maxn],c[maxn];
int f[maxn][maxm];
int main(){
  scanf("%d%d",&m,&n);
  for(int i=1;i<=n;i++)
    scanf("%d%d",&w[i],&c[i]);
  for(int i=1;i<=n;i++)
    for(int v=m;v>0;v--)//从这里开始的选取最大值我看不懂
	if(w[i]<=v)
      	    f[i][v]=max(f[i-1][v],f[i-1][v-w[i]]+c[i]);
  	else
    	    f[i][v]=f[i-1][v];
  printf("%d",f[n][m]);
  return 0;
希望能很快得到回复

回复

2 条回复,欢迎继续交流。

正在加载回复...