1 条题解

  • 0
    @ 2026-2-7 9:31:30
    #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
    上传者