找到硬盘更换的最低成本(动态编程)

时间:2014-07-17 15:37:03

标签: c recursion dynamic-programming

鉴于未来几个月内不同型号硬盘的价格,您的工作是确定在同一时间内维护备份磁盘的最低成本。

假设:

  1. 用户必须在一个月的第一天购买新的备份硬盘并出售旧硬盘。

  2. 他没有备用磁盘在第一个月的第一天销售。因此,他需要在第一个月的第一天购买新的备份磁盘,而不进行销售。

  3. 通过销售硬盘获得的金额比销售时同一型号新硬盘的当前价格低100美元。

  4. 相同型号硬盘的价格从未上涨,而且价格始终高于100美元。

    输入将不包含可用品牌“B”,后跟否。几个月“M”。下一行将采用所有“B”的品牌名称及其下个月的价格。您可以选择长度为3-10

  5. 的品牌名称

    示例输入

        2 4
        Brand1 4000 3600 3500 3400
        Brand2 3500 3500 3200 3000
    

    什么是所需的输出?我认为它是3500但正确的答案是 3400

    这是我的递归实现

    #include<stdio.h>
    #include<limits.h>
    
    
     int min(int p,int q){return p<q?p:q;}
     int t[2][4]={  {4000, 3600, 3500, 3400},
                    {3500 ,3500, 3200, 3000}   };
    
    
    
    int b=2;
    int m=4;
    
    
    int min_v(int n){
        int i;
        int mint=INT_MAX;
        for(i=0;i<b;i++)
            mint=min(mint,t[i][n]);
    
        return mint;
    }
    
    
    int min_cost(int b,int m,int sp,int month){
    
        int i,mint;
        mint=9999;
    
        if(m==month-1){
            printf("MM%d\n",min_v(m)-sp);
            return min_v(m)-sp;
        }
    
    
        for(i=0;i<=b-1;i++){
            mint=min(mint,t[i][m]-sp+min_cost(b,m+1,t[i][m+1]-100,month));
        }
    
        return mint;
    }
    
    
    int main(){
    
        printf("Min cost for backup is  %d",min_cost(b,0,0,m));
        return 0;
    }
    

0 个答案:

没有答案