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.pswp.cn/web/37021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37021.shtml
英文地址,請注明出處:http://en.pswp.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…