oj E : 投资项目的方案

Description

有n种基础的投资项目,每一种的单位收益率为profitn,存在m种投资组合,限制每一种的投资总额不能超过invest_summ
每种投资组合中项目所需的单位投入是不同的,为costmn

求:使得收益率之和最高的每种项目投资的单位数

Input

  • 两个整数:n(项目种类数,范围:1≤n<20),m(投资组合数,1≤m<20)
  • 一行长度为n的2位小数:profitn(单位收益率,0<profitn<1)
  • 一行长度为m的整数:invest_summ(某组合的限制投资总额,invest_summ>0)
  • m行长度为n的整数:costmn(某组合中某项目的单位投入,costmn>0)

Output

  • 输出n个以空格间隔的8位小数,表示每一个项目投资的单位量。
  • 如果有多个最优解,输出任意一个。

Sample

#0
Input

Copy

4 3  
0.13 0.75 0.25 0.44  
20 7 50  
5 3 2 1  
2 1 1 1  
7 12 9 2  
Output

Copy

0.00000000 3.60000000 0.00000000 3.40000000

Hint

max Σprofit x
s.t. cost x<= invest_sum, x>=0

线性规划公式秒了

#include<iostream>
#include<cmath>
#include"stdio.h"
using namespace std;
#define M 10000
double kernel[110][310];
int m = 0, n = 0, t = 0;
void input()
{cin>>n;cin>>m;// m = 3;int i, j;//初始化核心向量for (i = 0; i <= m + 1; i++)for (j = 0; j <= n + m + m; j++)kernel[i][j] = 0;for (i=1;i<=n;i++)cin>>kernel [0][i];for(i=1;i<=m;i++){cin>>kernel[i][n+2];}for (i=1;i<=m;i++){// cout<<"    不等式"<<i<<"  ";for (j=1;j<=n+2;j++){if(j==n+1){kernel[i][j]=1;}else if(j==n+2){}else{cin>>kernel [i][j];}}}for (i = 1; i <= m; i++){kernel[i][0] = kernel[i][n + 2];kernel[i][n + 2] = 0;}
//-1最大值
//1最小值t = -1;if (t == -1)for (i = 1; i <= n; i++)kernel[0][i] = (-1)*kernel[0][i];for (i = 1; i <= m; i++){kernel[i][n + i] = kernel[i][n + 1];if (i != 1)kernel[i][n + 1] = 0;}
}//算法函数
void comput()
{int i, j, flag, temp1, temp2, h, k = 0, temp3[100];double a, b[110], temp, temp4[110], temp5[110], f = 0, aa, d, c;for (i = 1; i <= m; i++)temp3[i] = 0.0000;for (i = 0; i < 11; i++){temp4[i] = 0.000;temp5[i] = 0.0000;}for (i = 1; i <= m; i++){if (kernel[i][n + i] == -1){kernel[i][n + m + i] = 1;kernel[0][n + m + i] = M;temp3[i] = n + m + i;}elsetemp3[i] = n + i;}for (i = 1; i <= m; i++)temp4[i] = kernel[0][temp3[i]];do {for (i = 1; i <= n + m + m; i++){a = 0;for (j = 1; j <= m; j++)a += kernel[j][i] * temp4[j];kernel[m + 1][i] = kernel[0][i] - a;}for (i = 1; i <= n + m + m; i++){if (kernel[m + 1][i] >= 0) flag = 1;else{flag = -1;break;}}if (flag == 1){for (i = 1; i <= m; i++){if (temp3[i] <= n + m) temp1 = 1;else{temp1 = -1;break;}}if (temp1 == 1){// cout << " 此线性规划的最优解存在!" << endl << endl << "  最优解为:" << endl << endl << "     ";for (i = 1; i <= m; i++)temp5[temp3[i]] = kernel[i][0];for (i = 1; i <= n; i++)f += t * kernel[0][i] * temp5[i];for (i = 1; i <= n; i++){if(i==1){printf("%.8f",temp5[i]);}else{printf(" %.8f",temp5[i]);}//                     cout << "x" << i << " = " << temp5[i];
//                    printf("")
//                     if (i != n)
//                     cout << ", ";}cout<<endl;// cout << " ;" << endl << endl << "     最优目标函数值f= " << f << endl << endl;
//                printf("%.6f\n",f);return;}else{// cout << " 此线性规划无解" << endl << endl;return;}}if (flag == -1){temp = 100000;for (i = 1; i <= n + m + m; i++)if (kernel[m + 1][i] < temp){temp = kernel[m + 1][i];h = i;}for (i = 1; i <= m; i++){if (kernel[i][h] <= 0) temp2 = 1;else {temp2 = -1;break;}}}if (temp2 == 1){// cout << "此线性规划无约束";return;}if (temp2 == -1){c = 100000;for (i = 1; i <= m; i++){if (kernel[i][h] != 0)  b[i] = kernel[i][0] / kernel[i][h];if (kernel[i][h] == 0)  b[i] = 100000;if (b[i] < 0)     b[i] = 100000;if (b[i] < c){c = b[i];k = i;}}temp3[k] = h;temp4[k] = kernel[0][h];d = kernel[k][h];for (i = 0; i <= n + m + m; i++)kernel[k][i] = kernel[k][i] / d;for (i = 1; i <= m; i++){if (i == k)continue;aa = kernel[i][h];for (j = 0; j <= n + m + m; j++)kernel[i][j] = kernel[i][j] - aa * kernel[k][j];}}} while (1);return;
}int main()
{input();for(int i=1;i<n;i++){for(int j=1;j<m+2;j++){// cout<<kernel[i][j]<<" ";}// cout<<endl;}comput();// int a = 0;// scanf("%d", &a);// cout<<f<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于机器学习的制冷系统过充电和欠充电故障诊断(采用红外热图像数据,MATLAB)

到目前为止&#xff0c;制冷系统故障诊断方法已经产生很多种&#xff0c;概括起来主要有三大类&#xff1a;基于分析的方法&#xff0c;基于知识的方法和基于数据驱动的方法。基于分析的方法主要获得制冷系统的数学模型&#xff0c;通过残差来检测和诊断故障。如果存在残差且很…

[JS]BOM操作

介绍 BOM(Browser Object Model)是浏览器对象模型 window对象是一个全局对象, 也是JS中的顶级对象通过var定义在全局作用域中的变量和函数都会变成window对象的属性和方法window对象下的属性和方法调用时一般省略window 间歇函数 定时器 定时器是间歇函数的一种, 可以每个每…

酒店客房管理系统(Java+MySQL)

技术栈 Java: 作为主要编程语言。Swing GUI: 用于开发图形用户界面。MySQL: 作为数据库管理系统。JDBC: 用于连接和操作MySQL数据库。 功能要点 管理登录认证 系统提供管理员登录认证功能。通过用户名和密码验证身份&#xff0c;确保只有授权的用户可以访问和管理酒店客房信…

【three.js案例二】时空隧道

import * as THREE from ./build/three.module.js // 引入轨道控制器扩展库OrbitControls.js import { OrbitControls } from three/addons/controls/OrbitControls.js; // 引入dat.gui.js的一个类GUI import { GUI } from three/addons/libs/lil-gui.module.min.js;// 场景 co…

刷题——合并二叉树

合并二叉树_牛客题霸_牛客网 方法一&#xff1a; TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {// write code hereif(t1 NULL) return t2;if(t2 NULL) return t1;TreeNode* head new TreeNode(t1->val t2->val);head->left mergeTrees(t1->left, t2-…

Supplemental Logging LOG DATA (ALL) COLUMNS

加的columns越多&#xff0c;说明一个普通的update中where 条件校验的列越多 update "SCOTT"."EMP" set "ENAME" ALLKEY where "EMPNO" 7566 and "ENAME" JONES and "JOB" MANAGER and "MGR" 783…

Android Service两种启动方式的区别

在Android中&#xff0c;启动Service的方式主要有两种&#xff0c;分别是通过startService()和bindService()。以下是这两种方式的详细解释&#xff1a; 1、通过startService()启动Service&#xff1a; 这是最常用的启动Service的方式。开发者可以通过Intent来指定要启动的Se…

名企面试必问30题(十)——你有自己的方法论吗?

1.思路 第一&#xff0c;方法论指的是做某些事情或业务的套路&#xff0c;但它没有绝对的正确性&#xff0c;每个人都可以拥有专属的方法论。 第二&#xff0c;方法论必定源自于自身实战经验的总结。 2.参考解答 “在软件测试工作中&#xff0c;我逐渐形成了自己的一套方法论。…

python简单爬虫firefox selenium

# codingutf-8# 1.先设置编码&#xff0c;utf-8可支持中英文&#xff0c;如上&#xff0c;一般放在第一行# 2.注释&#xff1a;包括记录创建时间&#xff0c;创建人&#xff0c;项目名称。Created on 2019-11-25 author: Project: python selenium-打开和关闭浏览器 # 3.导入模…

学习记录:`for` 语句与`while`语句的区别

for 语句与while语句的区别&#xff1a; for 和 while 语句都是循环控制结构&#xff0c;用于重复执行一段代码直到满足特定条件。尽管它们的基本目的是相似的&#xff0c;但它们的语法和一些使用场景有所不同。 for 语句&#xff1a; 用途&#xff1a;通常用于已知循环次数…

离线安装docker社区版

以下是离线安装 Docker 社区版的一般步骤&#xff1a; 准备工作&#xff1a; 在有网络的环境下&#xff0c;从 Docker 官网下载适合你系统的 Docker 社区版安装包以及相关依赖包。 传输安装包到离线机器&#xff1a; 使用移动存储设备或其他合适的方式将下载好的安装包及依赖转…

【剑指Offer系列】53-0到n中缺失的数字(index)

给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1&#xff1a; 输入&#xff1a;nums [3,0,1] 输出&#xff1a;2 解释&#xff1a;n 3&#xff0c;因为有 3 个数字&#xff0c;所以所有的数字都在范围 [0,3]…

应用决策树批量化自动生成【效果好】【非过拟合】的策略集

决策树在很多公司都实际运用于风险控制,之前阐述了决策树-ID3算法和C4.5算法、CART决策树原理(分类树与回归树)、Python中应用决策树算法预测客户等级和Python中调用sklearn决策树。 本文介绍应用决策树批量自动生成效果好,非过拟合的策略集。 文章目录 一、什么是决策树二…

数字化那点事:一文读懂数字乡村

一、数字乡村的定义 数字乡村是指利用信息技术和数字化手段&#xff0c;推动乡村社会经济发展和治理模式变革&#xff0c;提升乡村治理能力和公共服务水平&#xff0c;实现乡村全面振兴的一种新型发展模式。它包括农业生产的数字化、乡村治理的智能化、乡村生活的现代化等方面…

Elasticsearch的节点、集群和分片

Elasticsearch的节点、集群和分片 节点 什么是节点 ES是使用Java语言开发的。ES可以创建多个节点&#xff0c;一个节点就是一个ES实例&#xff0c;也就是一个Java线程。ES在生产环境中每个节点都是分布在不同的服务器上的&#xff0c;目的是达到集群的高可用多个节点构成一个…

Nginx系列-1 Nginx安装与使用

背景 最近对项目进行了Https改造&#xff0c;改造过程涉及Nginx技术&#xff0c;因此进行简单总结。 从本文开始将开启一个新的专题Nginx系列&#xff0c;用于收集Nginx相关的文章&#xff0c;内容将包括&#xff1a; Nginx系列—1 Nginx安装与使用Nginx系列—2 Nginx配置Ngi…

记一次小程序渗透

这次的小程序渗透刚好每一个漏洞都相当经典所以记录一下。 目录 前言 漏洞详情 未授权访问漏洞/ 敏感信息泄露&#xff08;高危&#xff09; 水平越权&#xff08;高危&#xff09; 会话重用&#xff08;高危&#xff09; 硬编码加密密钥泄露&#xff08;中危&#xff0…

熟练掌握爬虫技术

一、Crawler、Requests反爬破解 1. HTTP协议与WEB开发 1. 什么是请求头请求体&#xff0c;响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;…

整合 Mybatis Plus

什么是 MyBatis Plus&#xff1f; MyBatis Plus &#xff08;简称 MP&#xff09; 是一款持久层框架&#xff0c;说白话就是一款操作数据库的框架。它是一个 MyBatis 的增强工具&#xff0c;就像 iPhone手机一般都有个 plus 版本一样&#xff0c;它在 MyBatis 的基础上只做增强…

NOI大纲——普及组——编码

编码 ##ASCLL码 ASCII码&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是一种基于拉丁字母的字符编码方案&#xff0c;主要用于表示文本数据。ASCII码包含128个字符&#xff08;0-127&#xff09;&#xff0c…