【武汉理工大学计算机复试刷题】(C语言)动态规划求解0/1背包问题之求最大价值
文章目录
- 题目描述
- 思路分析
- 代码
- 运行情况
- 输入文件
- 运行结果
- 发现的问题
题目描述
一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重星分别是W1,W2, … Wn,它们的价值分别为C,2…,Cn ,求旅行者能获得最大总价值。
思路分析
参考教程:背包问题
(1)若背包容量<当前待放置物品
dp[i][j]=dp[i-1][j]
(2)当背包容量>当前待放置的物品时,有两种情况:
①放该物品——让上一状态的背包容量减去该物品的重量(腾位置),并加上该物品的权值
dp[i][j]=dp[i-1][j-w[i]]+v[i]
②不放该物品——权值和上一状态一样
dp[i][j]=dp[i-1][j]
我们的取值就是这两个dp[i][j]中选择最大的那一个即可。
代码
//一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重星分别是W1,W2, ... Wn,它们的价值分别为C,2....,Cn ,求旅行者
//能获得最大总价值。#include<stdio.h>
#include<stdlib.h>int max(int a,int b)
{return (a>b)?a:b;
}int main()
{int dp[100][100];FILE *fp = fopen("./input.txt","r");// 记录初始化int M = 0; // 背包容量int n = 0; //物品fscanf(fp,"%d %d",&M,&n);for(int i=0;i<=n;i++)dp[i][0]=0;for(int j=0;j<=M;j++)dp[0][j]=0;int *w=(int*)malloc(sizeof(int)*n+1);int *v=(int*)malloc(sizeof(int)*n+1);for(int i=1;i<=n;i++)fscanf(fp,"%d ",&w[i]);for(int i=1;i<=n;i++)fscanf(fp,"%d ",&v[i]); // 第一列第一行全0for(int i=1;i<=n;i++){for(int j=1;j<=M;j++){if(j<w[i])dp[i][j] = dp[i-1][j];elsedp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);if(j>=w[i]){//看价值量装还是不装dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);}elsedp[i][j] = dp[i-1][j];}}printf("max value:%d\n",dp[n][M]);printf("dp table:\n");for(int i=0;i<=n;i++){for(int j=0;j<=M;j++){printf("%d ",dp[i][j]);}printf("\n");}getchar();}
运行情况
输入文件
第一行为背包容量M,物品种类n
第二行前n个数为1-n物品的重量,后n个数为1-n物品的价值
运行结果
发现的问题
程序报越界错误,查看生成的dp表,发现不大对:
递归求dp的时候,i、j都是从1开始的,而我的w、v数组从0开始存数据,当i取到4时,显然取不到,越界!
【武汉理工大学计算机复试刷题】(C语言)动态规划求解0/1背包问题之求最大价值相关推荐
- 2018武汉理工大学计算机考研真题+复试经验
2018武汉理工大学计算机考研真题+复试经验 初试 对于专硕的同学来说,分非常重要(占成绩70%),尽量还是多考点分吧,公共课我就不说了,网上攻略很多,今年普遍都很难,尤其是数学,70-80很多,所以 ...
- 武汉理工大学计算机复试笔试重要吗,2017武汉理工计算机复试
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 2017年4月1日愚人节对没错就是愚人节.计算机学院的官网上放出了拟录取名单.半年的长跑终于有了结果本人本科学的也不是计算机的,来自万金油管理学院的信管专 ...
- 武汉理工计算机专考研专业课,2017武汉理工大学计算机考研专业课真题
2017武汉理工大学计算机考研专业课真题本站小编 福瑞考研网/2017-05-06 2017年武汉理工大学初试/复试真题(回忆版) [2017初试852题目]: 一. 选择题(1-4个正确选项,每个2 ...
- 2021武汉理工大学计算机考研复试经验分享(最新版)
2021武汉理工大学计算机考研复试经验分享 简介 最近,刚刚结束了期末考试回家,也是陆陆续续接到群里面的很多好友询问一些关于复试的要求和准备方法.最近我也是将以前复试的资料和我当时做的一些准备工 ...
- 武汉理工大学计算机考研复试资料,武汉理工大学计算机考研复试
武汉理工大学 计算机考研 复试 心得体会 经验 前言:理工计算机最近几年的复试题目貌似都很难找,作为过来人,本人深深高手到其不方便~~为此,本人在复试完毕后对题目做了及时的记录,希望对以后几届想考理工 ...
- 华南理工计算机基础知识题,华南理工大学计算机复试经验(双非跨考)复试真题...
华南理工大学计算机复试经验(双非跨考)复试真题 华南理工大学 发布于2019年9月24日 00:28 阅读数 2062 判断能否进复试 成绩出后可以看看自己能不能进复试了.这个主要是看排名,进复试的比 ...
- 武汉理工的计算机复试题难,武汉理工2018计算机复试真题分享
武汉理工2018复试回忆,本人计算机专硕. 第一天上午资格审查,需要所带材料的复印件上交,排队交钱交表就行了. 下午面试,出复试名单的时候每人有个复试编号,按编号分四组,按照要求的时间去就行了,抽签选 ...
- 武汉理工大学计算机考研资料汇总
武汉理工大学计算机科学与技术学院 计算机学院经过20多年的发展与建设,目前已具备"计算机应用技术"博士学位授予权."计算机应用技术"和"计算机软件与理 ...
- 2023武汉理工大学计算机考研信息汇总
武汉理工大学计算机科学与技术学院 计算机学院经过20多年的发展与建设,目前已具备"计算机应用技术"博士学位授予权."计算机应用技术"和"计算机软件与理 ...
最新文章
- OpenCV+python:模板匹配
- mysql 多表关联建模_(四)多对多模式 - 数据库模型设计专栏 - CSDN博客
- [QA] MySQL Error 1050(42S01): Table already exist
- Codechef July Challenge 2018 : Subway Ride
- 恒安嘉新面试题java_面了三个大厂,终于拿到offer,数年Java最经典的面试题总结...
- linux 基于qt assistant制作软件帮助文档,基于Qt Assistant的软件帮助系统
- 奖学金c语言程序,奖学金 (C语言代码)
- android 应用分析,分析 Android 应用
- Could not find artifact org.olap4j:olap4j:pom:0.9.7.309-JS-3 in alimaven
- C++向函数传递数组
- 遥感数据共享(一)珠海一号数据
- java的线程的daemon_Java 多线程(四)之守护线程(Daemon)
- 2020apple教育优惠购买策略
- html 的title中显示网页logo
- H5网页去除苹果手机底部白边
- 为什么视频云服务会被各行业广泛看好?
- Java之~~包(package)
- VS2012编译和调用gdal
- 【元胞自动机】元胞自动机交通事故通行【含Matlab源码 1345期】
- IOS个人账户转公司账户,TPshop APP提交审核
热门文章
- oracle 转移是什么意思,Oracle数据库迁移的几种方式以及一些坑
- bootstrap五星评分_jquery星星评分插件Bootstrap Star Rating
- 图漾深度相机初步使用流程
- 《时空猎人》——有“礼”就赶紧兑换!
- 苹果电脑怎么分屏?为您带来Mac分屏小技巧,让你办公更高效!
- 计算机助理证书有用吗,请问计算机助理级职称证书
- java生成多页pdf_由1个PDF模板创建的多页PDF
- 汇编语言实现冒泡排序
- 高分辨率电脑使用3dMax的字体过小问题的解决方案
- 进入Docker 容器 docker exec [CONTAINER ID] bin/bash报错问题