数据结构与算法之维克多博士的裂变反应堆C++
时间:2019-08-19
本文章向大家介绍数据结构与算法之维克多博士的裂变反应堆C++,主要包括数据结构与算法之维克多博士的裂变反应堆C++使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述:
维克多博士创造了一个裂变反应堆,可取用处于液体状态的放射性物质。反应堆的容量是V加仑。他有N瓶的放射性液体,每个都有一定的质量和一定的体积。当液体倒入反应堆时,也产生一些单位的能量。现在,维克多想要将能量输出最大化。但是,有一个限制条件。他研究了原子元素的物理知识和历史,认识到反应堆内放射性液体的总量不能超过特定的临界质量M,否则反应就会失控,并引发剧烈的爆炸。写一个算法,帮助他从反应堆获得最大的能量,而不会让他丢掉性命。
输入:
该函数/方法的输入包括六个参数------
reactorCap,一个整数,表示反应堆的容量(V);
numberOfRadLiquid,一个整数,表示现有小瓶的数量(N);
criticalMass,一个整数,表示反应堆的最大临界质量(M);
volumes,一个整数列表,按顺序表示N份放射性液体的体积;
masses,一个整数列表,按顺序表示N份放射性液体的质量;
energies,一个整数列表,按顺序表示N份放射性液体产生的能量。
输出:
返回一个整数,表示可给定的约束条件下从反应堆中产生的最大能量。
示例:
输入:
reactorCap=100,numberOfRadLiquid=5,criticalMass=15,volumes=[50,40,30,20,10],masses=[1,2,3,9,5],energies=[300,480,270,200,180]
输出:
960
解释:
选择1、2、5号瓶中的液体,产生的能量=300+480+180=960.
解析:这是一个典型的01背包问题,直接上代码了,注意判断一下输入是否合理。
#include <vector> #include <iostream> #include <algorithm> #include <sstream> using namespace std; int maxenergy(int reactorCap, int n, int maxmass, vector<int> vol, vector<int> mass, vector<int> ener) { if (n < 1) return 0; vector<vector<int>> dp(maxmass + 1, (vector<int>)(reactorCap + 1)); for (int i = 0; i < n; i++) { for (int j = dp.size()-1; j > 0; j--) { for (int k = dp[j].size()-1; k > 0; k--) { if(vol[i] <= k && mass[i] <=j) dp[j][k] = max(dp[j][k], dp[j - mass[i]][k-vol[i]] + ener[i]); } } } return dp[maxmass][reactorCap]; } int main() { int reactorCap; cout << "Intput reactorCap: "; cin >> reactorCap; int n; cout << "Intput numberOfRadLiquid:"; cin >> n; int maxmass; cout << "Intput maxmass: "; cin >> maxmass; vector<int>volumes; vector<int>masses; vector<int>energies; int tmp = 0; for (int i = 0; i<n; i++) { cout << "Intput volumes:"; cin >> tmp; volumes.push_back(tmp); } for (int i = 0; i<n; i++) { cout << "Intput masses:"; cin >> tmp; masses.push_back(tmp); } for (int i = 0; i<n; i++) { cout << "Intput energies:"; cin >> tmp; energies.push_back(tmp); } int res = maxenergy(reactorCap, n, maxmass, volumes, masses, energies); cout << res << endl; system("pause"); return 0; }
原文地址:https://www.cnblogs.com/jxLuTech/p/11377733.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python使用tkinter实现摇骰子小游戏功能的代码
- pandas to_excel 添加颜色操作
- Python自带的IDE在哪里
- php+Ajax无刷新验证用户名操作实例详解
- PHP经典设计模式之依赖注入定义与用法详解
- 浅谈python出错时traceback的解读
- PHP判断是否是微信打开还是浏览器打开的方法
- php面向对象程序设计中self与static的区别分析
- PHP如何根据文件头检测文件类型实例代码
- PHP去除空数组且数组键名重置的讲解
- Yii2框架配置文件(Application属性)与调试技巧实例分析
- java解析json方法总结
- PHP正则验证字符串是否为数字的两种方法并附常用正则
- 使用python编写一个语音朗读闹钟功能的示例代码
- PHP中常见的密码处理方式和建议总结