算法分析与设计投资问题

实验报告

课程名称 《算法分析与设计》 实验日期 2020年 4 月 25 日 至 2020 年4 月 25 日
学生姓名 林泓佺 所在班级 计算机193 学号 20019212212088
实验名称 投资问题
实验地点 勤园13号楼208 同组人员 林泓佺

1.问题
[你有m元,有n个项目可以投资,每个项目都有自己的收益w[i]并且需要c[i]元去投资,如何收益最大化]
2.解析
[设立dp[],dp[i]表示的是i元钱能获得的最大收益,再每次加入项目进行更新,每个项目将dp[m]到dp[c[i]]全部更新一遍,转移方程为dp[j]=max(dp[j],dp[j-c[i]]+w[i]),表示j元钱原本的收益与加入项目i之后j的收益取大值,最后就能得到dp[m]为最大收益模拟过程如下:
数据:
8 20
14 9
9 6
12 8
5 9
11 6
2 1
14 8
6 4
结果:
利用1个项目更新 更新前:dp[20]=0 更新后:14
利用1个项目更新 更新前:dp[19]=0 更新后:14
利用1个项目更新 更新前:dp[18]=0 更新后:14
利用1个项目更新 更新前:dp[17]=0 更新后:14
利用1个项目更新 更新前:dp[16]=0 更新后:14
利用1个项目更新 更新前:dp[15]=0 更新后:14
利用1个项目更新 更新前:dp[14]=0 更新后:14
利用1个项目更新 更新前:dp[13]=0 更新后:14
利用1个项目更新 更新前:dp[12]=0 更新后:14
利用1个项目更新 更新前:dp[11]=0 更新后:14
利用1个项目更新 更新前:dp[10]=0 更新后:14
利用1个项目更新 更新前:dp[9]=0 更新后:14
利用2个项目更新 更新前:dp[20]=14 更新后:23
利用2个项目更新 更新前:dp[19]=14 更新后:23
利用2个项目更新 更新前:dp[18]=14 更新后:23
利用2个项目更新 更新前:dp[17]=14 更新后:23
利用2个项目更新 更新前:dp[16]=14 更新后:23
利用2个项目更新 更新前:dp[15]=14 更新后:23
利用2个项目更新 更新前:dp[14]=14 更新后:14
利用2个项目更新 更新前:dp[13]=14 更新后:14
利用2个项目更新 更新前:dp[12]=14 更新后:14
利用2个项目更新 更新前:dp[11]=14 更新后:14
利用2个项目更新 更新前:dp[10]=14 更新后:14
利用2个项目更新 更新前:dp[9]=14 更新后:14
利用2个项目更新 更新前:dp[8]=0 更新后:9
利用2个项目更新 更新前:dp[7]=0 更新后:9
利用2个项目更新 更新前:dp[6]=0 更新后:9
利用3个项目更新 更新前:dp[20]=23 更新后:26
利用3个项目更新 更新前:dp[19]=23 更新后:26
利用3个项目更新 更新前:dp[18]=23 更新后:26
利用3个项目更新 更新前:dp[17]=23 更新后:26
利用3个项目更新 更新前:dp[16]=23 更新后:23
利用3个项目更新 更新前:dp[15]=23 更新后:23
利用3个项目更新 更新前:dp[14]=14 更新后:21
利用3个项目更新 更新前:dp[13]=14 更新后:14
利用3个项目更新 更新前:dp[12]=14 更新后:14
利用3个项目更新 更新前:dp[11]=14 更新后:14
利用3个项目更新 更新前:dp[10]=14 更新后:14
利用3个项目更新 更新前:dp[9]=14 更新后:14
利用3个项目更新 更新前:dp[8]=9 更新后:12
利用4个项目更新 更新前:dp[20]=26 更新后:26
利用4个项目更新 更新前:dp[19]=26 更新后:26
利用4个项目更新 更新前:dp[18]=26 更新后:26
利用4个项目更新 更新前:dp[17]=26 更新后:26
利用4个项目更新 更新前:dp[16]=23 更新后:23
利用4个项目更新 更新前:dp[15]=23 更新后:23
利用4个项目更新 更新前:dp[14]=21 更新后:21
利用4个项目更新 更新前:dp[13]=14 更新后:14
利用4个项目更新 更新前:dp[12]=14 更新后:14
利用4个项目更新 更新前:dp[11]=14 更新后:14
利用4个项目更新 更新前:dp[10]=14 更新后:14
利用4个项目更新 更新前:dp[9]=14 更新后:14
利用5个项目更新 更新前:dp[20]=26 更新后:32
利用5个项目更新 更新前:dp[19]=26 更新后:26
利用5个项目更新 更新前:dp[18]=26 更新后:26
利用5个项目更新 更新前:dp[17]=26 更新后:26
利用5个项目更新 更新前:dp[16]=23 更新后:25
利用5个项目更新 更新前:dp[15]=23 更新后:25
利用5个项目更新 更新前:dp[14]=21 更新后:23
利用5个项目更新 更新前:dp[13]=14 更新后:20
利用5个项目更新 更新前:dp[12]=14 更新后:20
利用5个项目更新 更新前:dp[11]=14 更新后:14
利用5个项目更新 更新前:dp[10]=14 更新后:14
利用5个项目更新 更新前:dp[9]=14 更新后:14
利用5个项目更新 更新前:dp[8]=12 更新后:12
利用5个项目更新 更新前:dp[7]=9 更新后:11
利用5个项目更新 更新前:dp[6]=9 更新后:11
利用6个项目更新 更新前:dp[20]=32 更新后:32
利用6个项目更新 更新前:dp[19]=26 更新后:28
利用6个项目更新 更新前:dp[18]=26 更新后:28
利用6个项目更新 更新前:dp[17]=26 更新后:27
利用6个项目更新 更新前:dp[16]=25 更新后:27
利用6个项目更新 更新前:dp[15]=25 更新后:25
利用6个项目更新 更新前:dp[14]=23 更新后:23
利用6个项目更新 更新前:dp[13]=20 更新后:22
利用6个项目更新 更新前:dp[12]=20 更新后:20
利用6个项目更新 更新前:dp[11]=14 更新后:16
利用6个项目更新 更新前:dp[10]=14 更新后:16
利用6个项目更新 更新前:dp[9]=14 更新后:14
利用6个项目更新 更新前:dp[8]=12 更新后:13
利用6个项目更新 更新前:dp[7]=11 更新后:13
利用6个项目更新 更新前:dp[6]=11 更新后:11
利用6个项目更新 更新前:dp[5]=0 更新后:2
利用6个项目更新 更新前:dp[4]=0 更新后:2
利用6个项目更新 更新前:dp[3]=0 更新后:2
利用6个项目更新 更新前:dp[2]=0 更新后:2
利用6个项目更新 更新前:dp[1]=0 更新后:2
利用7个项目更新 更新前:dp[20]=32 更新后:34
利用7个项目更新 更新前:dp[19]=28 更新后:30
利用7个项目更新 更新前:dp[18]=28 更新后:30
利用7个项目更新 更新前:dp[17]=27 更新后:28
利用7个项目更新 更新前:dp[16]=27 更新后:27
利用7个项目更新 更新前:dp[15]=25 更新后:27
利用7个项目更新 更新前:dp[14]=23 更新后:25
利用7个项目更新 更新前:dp[13]=22 更新后:22
利用7个项目更新 更新前:dp[12]=20 更新后:20
利用7个项目更新 更新前:dp[11]=16 更新后:16
利用7个项目更新 更新前:dp[10]=16 更新后:16
利用7个项目更新 更新前:dp[9]=14 更新后:16
利用7个项目更新 更新前:dp[8]=13 更新后:14
利用8个项目更新 更新前:dp[20]=34 更新后:34
利用8个项目更新 更新前:dp[19]=30 更新后:33
利用8个项目更新 更新前:dp[18]=30 更新后:31
利用8个项目更新 更新前:dp[17]=28 更新后:28
利用8个项目更新 更新前:dp[16]=27 更新后:27
利用8个项目更新 更新前:dp[15]=27 更新后:27
利用8个项目更新 更新前:dp[14]=25 更新后:25
利用8个项目更新 更新前:dp[13]=22 更新后:22
利用8个项目更新 更新前:dp[12]=20 更新后:20
利用8个项目更新 更新前:dp[11]=16 更新后:19
利用8个项目更新 更新前:dp[10]=16 更新后:17
利用8个项目更新 更新前:dp[9]=16 更新后:16
利用8个项目更新 更新前:dp[8]=14 更新后:14
利用8个项目更新 更新前:dp[7]=13 更新后:13
利用8个项目更新 更新前:dp[6]=11 更新后:11
利用8个项目更新 更新前:dp[5]=2 更新后:8
利用8个项目更新 更新前:dp[4]=2 更新后:6

最大收益为 : 34
]
3.设计
[#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int w[maxn];
int c[maxn];
int dp[maxn];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>w[i]>>c[i];
}
for(int i=0;i<n;i++){
for(int j=m;j>=c[i];j–){
cout<<“利用”<<i+1<<“个项目更新 “;
cout<<” 更新前:”<<“dp”<<"["<<j<<"]="<<dp[j]<<" “;
dp[j]=max(dp[j],dp[j-c[i]]+w[i]);
cout<<“更新后:”<<dp[j]<<endl;
}
}
cout<<”\n最大收益为 : ";
cout<<dp[m]<<endl;
}
/*
8 20
14 9
9 6
12 8
5 9
11 6
2 1
14 8
6 4
/]
4.分析
[最坏复杂度小于n
m]
5.源码
[github源码地址:https://github.com/lhqbalabala/sf4.25]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值