用动态规划法求解0/1背包问题

【问题描述】

给定n种物品和一个背包,物品i的重量是Wi,其价值为Vi,问如何选择装入背包的物品,使得装入容量为c的背包的物品的总价值最大?

【输入形式】

第一行输入背包容量c;第二行输入要装入的物品的个数;第三行输入装入的各个物品的重量w[i];第四行输入装入的物品的价值v[i]

【输出形式】

输出背包的最大总价值

【样例输入】

6
5
3 2 1 4 5
25 20 15 40 50

【样例输出】

65

c++代码

#include<iostream>
#include<algorithm>
using namespace std;
int V[100][100] = { 0 }; //造表记录子问题的最优解
int Knapsack(int w[], int v[], int n, int C);//实际物品数目,背包容量
int main()
{
	int C;
	cin>>C;
	int n;
	cin>>n;
   int w[100]={0}; 
   int v[100]={0};
   for (int i=1;i<=n;i++)
   {
   		cin>>w[i];
	}   
	for (int i=1;i<=n;i++)
	{
		cin>>v[i];
	}
   int maxValue = Knapsack(w, v, n, C);
   cout << maxValue;
    return 0;
}
int Knapsack(int w[], int v[], int n, int C) {
   for (int i = 0; i <= n; ++i)
      V[i][0] = 0;
   for (int j = 0; j <= C; ++j)
      V[0][j] = 0;
   for(int i=1;i<=n;++i)
      for (int j = 1; j <= C; ++j)
      {
         if (j < w[i])
            V[i][j] = V[i - 1][j];
         else {
            V[i][j] = max(V[i - 1][j], V[i - 1][j - w[i]] + v[i]);
         }
      }
   return V[n][C];
}
全部评论

相关推荐

2025-12-31 19:23
已编辑
门头沟学院 Java
ssob是已读不回的,字节是压根不敢投的,简历是反反复复改了N遍的,八股是永远背不完的😅😅😅扯远了,道心破碎了,把简历发出来让大伙先看看笑话。再说正事。寒假日常实习还是很难找,连个面试都难约,我不是个例,这是网上普遍反映。不报希望了,趁着2、3月前赶紧做些什么才是。扔几个碎碎念:1.这破简历还能怎么改?写到什么程度才能过实习岗筛选?广大牛友来锐评一下2.火速辅修go,是否可行目前看来是学习成本最小的。首先,很多go实习岗位已经明确要求掌握gin等技术栈,拿java简历投go的时代已经过去了。其次,很多后端的东西,MySQL、Redis这些都是通用的,不用重新学。所以这个问题就具体为:2.1&nbsp;java&amp;go混血简历怎么写第一个项目,仿大麦的微服务,不太好改。因为有用到Redisson、AOP、SpringAI这些java强相关的东西,包装成go需要替换这些方案。第二个,点评魔改。应该可以包装成go,github上也有人用go重写过。2.2&nbsp;java&amp;go通用的轮子RPC直接pass了,太烂大街了。不知道动态线程池能不能做。反正项目上新有风险,不一定来得及,非必要就不开新的项目。补充:别跟我扯RAG了,这玩意已经成新的烂大街了,详见我上一篇的吐槽。3.认真学微调prompt什么的这个半步踩进算法了已经。八股和场景题完全就是另一套,没两三个月搞不定的。约等于换方向
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务