1 条题解
-
0
#include<bits/stdc++.h> using namespace std; // [1] 全局变量定义:n-航班数量,d-天数,m-初始资金 int n,d,m; // [2] 存储每个航班未来d天的票价,arr[i][j]表示第i个航班第j天的价格 int arr[60][20]; int main(){ // [3] 输入航班数、天数、初始资金 cin>>n>>d>>m; // [4] 输入每个航班每天的票价 for(int i=1;i<=n;i++) { for(int j=1;j<=d;j++) { cin>>arr[i][j];// [5] 读取第i个航班第j天的票价存入数组 } } // [6] 遍历每一天(从第2天到第d天),处理当天的买卖交易 for(int i=2;i<=d;i++){ // [7] dp数组:dp[k]表示当前持有k元时,通过当天交易能获得的最大利润 vector<int> dp(m+1); // [8] 遍历每个航班,判断是否有盈利空间 for(int j=1;j<=n;j++) { // [9] 前一天的票价作为买入价,当天票价作为卖出价 int buy=arr[j][i-1];// 买入金额 int sell=arr[j][i];// 卖出金额 // [10] 如果卖出价不大于买入价,无利润,跳过该航班 if(sell <= buy) continue; int money=sell-buy;// 每张利润 // [11] 计算每张机票的利润 // [12] 遍历当前可投入的资金,计算最大利润 for(int k=buy;k<=m;k++) { // [13] 更新dp[k]:要么保持原有利润,要么用k元买入该航班机票再卖出,获得新利润 dp[k]=max(dp[k],dp[k-buy]+money); } } // [14] 当天交易结束后,将最大利润累加到当前资金中 m+=dp[m]; } // [15] 输出d天后的最终资金 cout<<m; return 0; }
- 1
信息
- ID
- 1333
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 1
- 上传者