c++版本:

#include<iostream>
#include<cstring>  //C++中memset函数所需要的头文件
using namespace std;
int main()
{int m,n;int a;cout<<"请输入工厂的个数:";cin>>m;cout<<"请输入每个投资种类的个数:";cin>>n;cout<<"请输入投资总金额:";cin>>a;int array[m][n]; //创建一个数组array:每个工厂在所有可能投资下的获取利润int array1[m][n];//创建一个数组array1:在某投资额下前M个工厂可以获取的最大利润int path[m][n]; //创建一个数组path:记录在某总投资额下投资一部分资金给第M个工厂时获取最大利润时,这个部分投资额的数值memset(array,0,sizeof(array));   //将数组array的值初始化为0memset(array1,0,sizeof(array1));  //将数组array1的值初始化为0memset(path,0,sizeof(path));    //将数组path的值初始化为0cout<<"请依次输入每个工厂在所有可能投资下的获取利润:";for(int i=0;i<m;i++){for(int j=0;j<n;j++){cin>>array[i][j];}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(i==0){array1[i][j]=array[i][j];       //第一个工厂直接全部分配给自己if(array[i][j]>path[i][j]){path[i][j]=j;  //全部投资额都给自己}}else{for(int k=0;k<n;k++){if(j-k>=0) //保证投资给除了自己的工厂外不能大于总投资额{if(array[i][k]+array1[i-1][j-k]>array1[i][j]) //获取收益最大值时投资给自己的投资额{array1[i][j]=array[i][k]+array1[i-1][j-k];//更新path[i][j]=k;    //记录投资给自己多少}}else{break;}}}}}cout<<"最大利润为:"<<array1[m-1][n-1]<<endl;a=a/10;for(int i=m-1;i>=0;i--){cout<<"第"<<i+1<<"个工厂投资为:"<<path[i][a]*10<<endl;a-=path[i][a];}
}

c版本:

c其实和c++差不多,思想都是一样的,只是头文件不一样,输入输出换为了scanf和printf。

#include<stdio.h>
#include<string.h>  //C中memset函数所需要的头文件int main()
{int m,n;int a;printf("请输入工厂的个数:");scanf("%d",&m);printf("请输入每个投资种类的个数:");scanf("%d",&n);printf("请输入投资总金额:");scanf("%d",&a);int array[m][n]; //创建一个数组array:每个工厂在所有可能投资下的获取利润int array1[m][n];//创建一个数组array1:在某投资额下前M个工厂可以获取的最大利润int path[m][n]; //创建一个数组path:记录在某总投资额下投资一部分资金给第M个工厂时获取最大利润时,这个部分投资额的数值memset(array,0,sizeof(array));   //将数组array的值初始化为0memset(array1,0,sizeof(array1));  //将数组array1的值初始化为0memset(path,0,sizeof(path));    //将数组path的值初始化为0printf("请依次输入每个工厂在所有可能投资下的获取利润:");int i,j,k;for(i=0;i<m;i++){for(j=0;j<n;j++){scanf("%d",&array[i][j]);}}for(i=0;i<m;i++){for(j=0;j<n;j++){if(i==0){array1[i][j]=array[i][j];       //第一个工厂直接全部分配给自己if(array[i][j]>path[i][j]){path[i][j]=j;  //全部投资额都给自己}}else{for(k=0;k<n;k++){if(j-k>=0) //保证投资给除了自己的工厂外不能大于总投资额{if(array[i][k]+array1[i-1][j-k]>array1[i][j]) //获取收益最大值时投资给自己的投资额{array1[i][j]=array[i][k]+array1[i-1][j-k];//更新path[i][j]=k;    //记录投资给自己多少}}else{break;}}}}}printf("最大利润为:%d \n",array1[m-1][n-1]);a=a/10;for(i=m-1;i>=0;i--){printf("第%d个工厂投资为:%d \n",i+1,path[i][a]*10);a-=path[i][a];}
}

运行结果:

动态规划: 投资分配问题相关推荐

  1. 动态规划——投资问题

    问题描述: 有m元钱,n项投资,f[i][x]代表将x元投入到第i个项目中的收益,求最大的收益 输入:第一行为总钱数m和总项目数n:接下来为n行输入,每行m+1个,第i行第j个代表f[i][j] 分析 ...

  2. 动态规划--资源分配问题

    问题描述: 资源分配问题是将数量一定的一种或若干种资源(原木料.资金.设备或劳动力等)合理地分配给若干个使用者,使总收益最大. 例如,某公司有3个商店A.B.C,拟将新招聘的5名员工分配给这3个商店, ...

  3. matlab多种分配方案_基于MATLAB的水资源优化分配问题动态规划解法

    基于 MATLAB 的水资源优化分配问题动态规划解法 摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了 动态规划方法分析.针对具体问题采用逆序解法的表格法进行了计 算,然后用 matlab 编 ...

  4. matlab如何处理动态分配,基于MATLAB的水资源优化分配问题动态规划解法

    摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了动态规划方法分析.针对具体问题采用逆序解法的表格法进行了计算,然后用MATLAB编制了相应的计算程序进行计算,避免了繁琐的人工计算.结果表明该方 ...

  5. 【算法分析zxd】第 8 章 动态规划

    动态规划的基本设计思想 将待求解问题分解成若干个子问题,分阶段求解子问题, 前一阶段子问题的解成为求后续阶段子问题的解的计算信息, 最后用这些子问题的最优解构造出原问题的最优解. 适合用动态规划求解的 ...

  6. 运筹学状态转移方程例子_专业课 | 运筹学动态规划笔记

    [1]概念原理多阶段决策特点 ▶多阶段决策是与时间相关的: ▶多阶段决策依赖于当前的状态: ▶每一个时段都要作出决策: ▶全部过程的决策是一个决策序列: ▶本段决策的执行将影响下一阶段的决策: ▶不仅 ...

  7. 五大基本算法及其经典问题

    五大常用算法之一:分治算法 经典问题: 1.二分搜索 2.大整数乘法 3.Strassen矩阵乘法 4.棋盘覆盖 5.合并排序 6.快速排序 7.线性时间选择 8.最接近点对问题 9.循环赛日程表 1 ...

  8. ACM 训练大纲【CSUST_ACM】

    来源:彪神发的训练文档                                                                      ACM 训练大纲           ...

  9. No.044<软考>《(高项)备考大全》【第27章】运筹学计算(典型考题思路讲解)

    [第27章]运筹学计算(典型考题思路讲解) 1 章节概述 1.1 运筹学计算涉及到的题型 2 最优的函数值 3 线性规划 题1 题2 题3 4 动态规划 投资收益最大的问题 5 最小生成树 题1 题2 ...

  10. ACM 训练大纲(CSUST_ACM)

    ACM 训练大纲 Changsha University of Science & Technology July 31, 2012 1 推荐题库 • http://ace.delos.com ...

最新文章

  1. CSDN 2022 届春季校园招聘火热启动!
  2. (0012) iOS 开发之MAC 终端命令学习
  3. [Python学习] 专题六.局部变量、全局变量global、导入模块变量
  4. java 大特性_java三大特性
  5. Office SharePoint Server 2007
  6. [css] 在固定宽度的div下,怎么让字体自适应大小,不超出宽度,也不要换行
  7. shell脚本显示颜色的设置
  8. wifi信道12为啥没人用_关于WIFI信道的问题?
  9. JS初学者使用jQuery开发一款弹幕射击游戏
  10. vs2019编译cryengine失败问题处理
  11. 动画:从 AE 到 Web
  12. 根据硬件ID查看摄像头型号方案,可查任何一款摄像头芯片来源
  13. XSS第一节,XSS档案
  14. @GetMapping注解的理解
  15. 【游戏开发创新】手把手教你使用Unity制作一个高仿酷狗音乐播放器,滨崎步,旋律起,爷青回(声音可视化 | 频谱 | Audio)
  16. Leetcode 1647. Minimum Deletions to Make Character Frequencies Unique [Python]
  17. linux ssh复制粘贴,Linux下SSH Session复制功能实现方法
  18. windows.edb文件过大,导致c盘空间极小问题
  19. Oracle Parallel Query(OPQ)
  20. DenseNet模型解读

热门文章

  1. Node.js与V8引擎
  2. 20181224每日一句
  3. Unity 模拟两个小球位置变化,长度也动态变化
  4. 数据挖掘 姓名用字特点 目录 1. 姓名用字特点 1 2. 男性姓名专用字210个(三字词,双字词都适用) 1 2.1. 男性姓名专用字 双字词适用317个 1 3. 女人姓名用字 2 3.1.
  5. Atitit 微服务 分布式 区别 微服务的判断标准 目录 1.1. 区别 微服务侧重于微小服务进程隔离级别,分布式侧重于机器隔离 1 2. 微服务是一种架构, 。多微才叫微? 1 2.1. 微服务
  6. Atitit 信息链(Information Chain)的概念理解 attilax总结
  7. Atitit http2 新特性
  8. atitit.产品console 日志的aticonsole 方案处理总结
  9. paip.docfile二进制复合文档
  10. clickhouse: A股bar数据与物化视图尝试