oj E : 投资项目的方案

news2024/10/7 16:19:41

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;
        }
        else
            temp3[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.coloradmin.cn/o/1879313.html

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

相关文章

Meven

目录 1.简介2.Maven项目目录结构2.1 约定目录结构的意义2.2 约定大于配置 3. POM.XML介绍3.2 依赖引用3.3 属性管理 4 Maven生命周期4.1 经常遇到的生命周期4.1 全部生命周期 5.依赖范围&#xff08;Scope&#xff09;6. 依赖传递6.1 依赖冲突6.2 解决依赖冲突6.2.1 最近依赖者…

1、线性回归模型

1、主要解决问题类型 1.1 预测分析(Prediction) 线性回归可以用来预测一个变量(通常称为因变量或响应变量)的值,基于一个或多个输入变量(自变量或预测变量)。例如,根据房屋的面积、位置等因素预测房价。 1.2 异常检测(Outlier Detection) 线性回归可以帮助识别数…

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定…

量产工具一一显示系统(一)

目录 前言 一、项目介绍和应用 1.简单易用 2.软件可配置、易扩展 3.纯 C 语言编程 4.类似界面应用 二、项目总体框架 三、显示系统 1.显示系统数据结构抽象 &#xff08;1&#xff09;common.h &#xff08;2&#xff09;disp_manager.h 2.Framebuffer编程 &#x…

Conformal Prediction

1 A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification 2 Language Models with Conformal Factuality Guarantees

《数据结构与算法基础 by王卓老师》学习笔记——类C语言有关操作补充

1.元素类型说明 2.数组定义 3.C语言的内存动态分配 4..C中的参数传递 5.传值方式 6.传地址方式 例子

grpc学习golang版( 一、基本概念与安装 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、基本介绍1.1 什么是rpc1.2 什么是grpc1.3 grpc的作用1.4 grp…

Django之邮箱注册

目录 一、邮箱验证-环境搭建 1.1、注册流程 1.2、环境搭建 二、封装工具类 三、发送邮件接口开发 四、用户调用发送邮件接口 4.1、Fetch API 4.1.1、GET请求 4.1.2、POST请求 五、完成注册功能 一、邮箱验证-环境搭建 1.1、注册流程 1.2、环境搭建 创建项目 django-a…

4 快速傅里叶变换(fast Fourier transform,FFT)

目录 基2FFT的基本原理&#xff0c;蝶形运算符 第L级旋转因子的计算公式 4点与8点鲽形图 确定输入x(n)的顺序 倒序算法 抽样算法 DFT与FFT运算次数公式 基2FFT的基本原理&#xff0c;蝶形运算符 第L级旋转因子的计算公式 4点与8点鲽形图 确定输入x(n)的顺序 倒序算法 1…

Java开发-实际工作经验和技巧-0003-容易被忽视的Git提交代码规范

Java开发-实际工作经验和技巧-0003-容易被忽视的Git提交代码规范 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&…

C# Benchmark

创建控制台项目&#xff08;或修改现有项目的Main方法代码&#xff09;&#xff0c;Nget导入Benchmark0.13.12&#xff0c;创建测试类&#xff1a; public class StringBenchMark{int[] numbers;public StringBenchMark() {numbers Enumerable.Range(1, 20000).ToArray();}[Be…

互联网算法备案 | 填报指南

一、填报入口 登陆互联网信息服务算法备案系统&#xff08;以下简称备案系统&#xff09;进行填报&#xff0c;网址为https://beian.cac.gov.cn。系统首页如图1所示。 图1备案系统首页&#xff08;示意图&#xff09; 二、填报流程 填报人员需首先注册并登陆备案系统&#x…

Hugging Face发布重量级版本:Transformer 4.4.2

Hugging Face 宣布发布Transformer 4.4.2&#xff0c;该版本为流行的机器学习库带来了许多新功能和增强功能。此版本引入了几个高级模型&#xff0c;支持新工具和检索增强生成 &#xff08;RAG&#xff09;&#xff0c;提供 GGUF 微调&#xff0c;并整合了量化的 KV 缓存&#…

机械设计简单介绍

机械设计简单介绍 1 介绍1.1 概述1.2 机械机构设计基本步骤1.3 关键1.3.1 静力学1.3.2 动力学1.3.3 运动学1.3.4 刚度学 1.4 示例【机械臂】 2 资料2.1 知识体系2.2 博客类汇总2.3 免费CAD模型获取2.4 3D打印2.5 SolidWorks 3 具备能力3.1 熟练翻阅 机械设计手册3.2 知道 N 家常…

BeautifulSoup 类通过查找方法选取节点

BeautifulSoup 类提供了一些基于 HTML 或 XML 节点树选取节点的方法&#xff0c;其中比较主流 的两个方法是 find() 方法和 find_all() 方法。 find() 方法用于查找符合条件的第一个节点&#xff1b; find_all() 方法用于查找所有符合条件的节点&#xff0c;并以列表的…

代码随想录算法训练营第三十五天(dp)|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 题目链接&#xff1a;509. 斐波那契数 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 思路&#xff1a;最简单的递归就不说了。使用动态规划的话&#xff0c;状态转移方程 dp[i] dp[i - 1] dp[i - 2] 题解&#xff1a; public int fib(int n) {…

miniconda 弹出黑窗

etc\conda\activate.d 和 envs 中不同环境中的 etc\conda\activated.d&#xff0c;只保留下图中的三个文件即可。

综合项目实战--jenkins节点模式

一、DevOps流程 DevOps是一种方法论,是一系列可以帮助开发者和运维人员在实现各自目标的前提下,向自己的客户或用户交付最大化价值及最高质量成果的基本原则和实践,能让开发、测试、运维效率协同工作的方法。 DevOps流程(自动化测试部分) DevOps完整流程 二、gitee+j…

Leica Cyclone 3DR2024 一款功能强大的点云建模软件下载License获取

Leica Cyclone 3DR 2024 是一款功能强大的点云建模软件&#xff0c;使用旨在为用户提供全面的点云管理、自动化的点云分析&#xff0c;结合强大的建模&#xff0c;在一个直观友好的环境中&#xff0c;专注的完成挑战&#xff0c;提高生产力&#xff0c;轻松创建并交付专业的成果…

AWTK 用 icon_at 属性设置图标位置

1. style 在 style 文件中通过 icon_at 属性设置图标位置。 <style name"right_bottom" icon_at"right_bottom"><normal icon"unchecked_right_bottom" /><pressed icon"unchecked_right_bottom" /><over i…