蓝桥杯 经典算法题 求解完全背包问题

题目:

题解:

和01背包基本完全一样。小局部最优的策略也是一样:是否选当前局部的最后一项。唯一的不同点在于物品是无线的导致在表示选择当前物品的状态写法发生了改变:由dpi-1j-w\[i]变为了dpij-w\[i]因为这样能够表示最后一件物品选多件的情况。

cpp 复制代码
#include <iostream>
using namespace std;
int main(){
  int total,N;
  int w[1005]={0},v[1005]={0};
  cin>>total>>N;
  int dp[1005][1005]={0};
  for(int i=1;i<=N;i++)cin>>w[i]>>v[i];
  for(int i=1;i<=N;i++){
    for(int j=0;j<=total;j++){
      dp[i][j]=dp[i-1][j];
      if(j>=w[i])dp[i][j]=max(dp[i][j],dp[i][j-w[i]]+v[i]);
    }
  }
  cout<<dp[N][total];
  return 0;
}

题后反思:

至于为什么j可以从1开始也可以从0开始我认为这其中因该包含了某种思想,现在我的答案是:

j为0和1的这些情况都小于了物品最的最小重量都只能从i-1得来所以都是0。

但其实这类题目的关键就在于思考清楚通过已有的值(入门后叫做状态)操作得出小局部最优的策略,然后注意初始值的设置递推得出答案即可。

相关推荐
wabs6668 分钟前
关于栈【力扣1047. 删除字符串中的所有相邻重复项的思考】
数据结构·c++·算法·leetcode··代码随想录
疯狂打码的少年27 分钟前
【数据结构】选择类排序:简单选择与堆排序
java·数据结构·笔记·算法
晚风醉蝶1 小时前
1-16-计数排序-CountingSort
python·算法·排序算法
疯狂打码的少年1 小时前
【数据结构】排序算法:归并排序与基数排序
数据结构·笔记·算法·排序算法
ychqsq1 小时前
122.收网
经验分享·职场和发展
fb_123451 小时前
Shell 脚本从 0 到精通|脚本规范 + 变量 + 数值运算 + 条件测试(可直接复制,面试必备)
chrome·面试·职场和发展
吃旺旺雪饼的小男孩2 小时前
U-Net 语义分割详解:原论文、PyTorch 实现与真实消融实
人工智能·pytorch·python·算法
lucas_AI2 小时前
35 种开源文档抽取配置,只有 4 个跨过 F1 0.5
人工智能·算法·llm
YSoup2 小时前
2026 安卓面试助手APP(安卓八股、题库)
android·面试·职场和发展
练习时长一年的RL研究者2 小时前
与AI对话后对 Actor-Critic 中 TD Target 的 a‘ 来源总结
算法