Kai’blog

主博客 | 势利纷华,近之而不染者洁,不近者亦洁,君子不立危墙之下。

背包问题

突然意识到,商品可以重复购买和商品只能买一个两种问题其实只要改一行代码即可实现,即两个问题只要改一下刷表的顺序即可,对于逆序刷表那便是只能买一次,顺序刷表便是不限制购买次数,如下

//逆序
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <queue>
#include <map>
#include <cmath>
#define int long long
using namespace std;
int N,M,w[3500],v[3500],dp[20000];
signed main()
{
cin>>N>>M;
for(int i=1;i<=N;i++)cin>>w[i]>>v[i];
//有意识的采用把复杂问题转化成庞杂子问题的集合的思想就是动态规划思想,
//因为复杂问题有意识的分解成子问题后就可以实现子问题的防止重复求解的问题,
//而不分解则会间接做重复的工作
for(int j=0;j<=M;j++)
{
if(j>=w[1])dp[j]=v[1];else dp[j]=0;
}
for(int i=2;i<=N;i++)
{
for(int j=M;j>=0;j--)//调转此行既为顺序
{
if(j-w[i]>=0)
dp[j]=max(dp[j],v[i]+dp[j-w[i]]);
}
}
cout<<dp[M]<<endl;
return 0;
}
posted @   Kai-G  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
Copyright © 2019-2020 拱垲. All rights reserved.
点击右上角即可分享
微信分享提示