zoukankan      html  css  js  c++  java
  • 邮资所需的最少邮票张数.(动态规划VS贪心)

     1.题目描述:

      某邮局将信分为两类,第一类信件要求在收信后的第2个工作日投到,第二类信件要求在收信第3个工作日投到,两类邮件的邮资如表1所示。

                                          表1   邮资表

                              

    重量不超过

    第一类邮资

    第二类邮资

    60g

    25便士

    19便士

    100g

    38便士

    29便士

    150g

    47便士

    36便士

    250g

    57便士

    43便士

    300g

    77便士

    52便士

    350g

    88便士

    61便士

    400g

    1.00镑

    70便士

    450g

    1.13镑

    79便士

    500g

    1.25镑

    89便士

    600g

    1.55镑

    98便士

    700g

    1.90镑

    1.20镑

    750g

    2.05镑

    1.40镑

    800g

    2.15镑

    不允许超过750g

    900g

    2.35镑

    1000g

    2.40镑

    每超过250g或超过

    一部分再加65便士

     

        英国当前使用的是以下面值的邮票:1便士,2便士,3便士,4便士,5便士,6便士,10便士,19便士,20便士,25便士,30便士,35便士,

        36便士,38便士,41便士,50便士,1.00镑,1.50镑,2.00镑,5.00镑,10.00镑。

        给出表1中每一种邮资所需的最少邮票张数。

        代码如下:

     1 #include<iostream>
     2 using namespace std;
     3 int a[15]= {25,38,47,57,77,88,100,113,125,155,
     4             190,205,215,235,240
     5            };
     6 int d[12]= {19,29,36,43,52,61,70,79,89,98,120,140};
     7 int b[21]= {1,2,3,4,5,6,10,19,20,25,30,35,36,38,41,50,100,150,200,500,1000};
     8 int dp[21][242];
     9 #define MAX 10000
    10 int main()
    11 {
    12     int i,j,k,m,n;
    13     for(j=1;j<=240;j++)
    14     {
    15         dp[0][j]=MAX;
    16         if(j-b[0]>=0&&dp[0][j-b[0]]!=MAX)
    17             dp[0][j]=dp[0][j-b[0]]+1;
    18     }
    19     for(i=1;i<21;i++)
    20     {
    21         for(j=1;j<=240;j++)
    22         {
    23             int s=MAX;
    24             if(j-b[i]>=0&&dp[i][j-b[i]]!=MAX)
    25                 s=dp[i][j-b[i]]+1;
    26             dp[i][j]=min(s,dp[i-1][j]);
    27         }
    28     }
    29     for(i=0;i<15;i++)
    30     {
    31         cout<<dp[20][a[i]]<<' ';
    32     }
    33     cout<<endl;
    34     for(i=0;i<12;i++)
    35     {
    36         cout<<dp[20][d[i]]<<' ';
    37     }
    38     return 0;
    39 }

    贪心思路:

     1 #include<iostream>
     2 using namespace std;
     3 int a[15]= {25,38,47,57,77,88,100,113,125,155,
     4             190,205,215,235,240
     5            };
     6 int d[12]= {19,29,36,43,52,61,70,79,89,98,120,140};
     7 int b[21]= {1,2,3,4,5,6,10,19,20,25,30,35,36,38,41,50,100,150,200,500,1000};
     8 int c[15];
     9 int e[12];
    10 
    11 int main()
    12 {
    13     int i,j,k,m,n;
    14     for(i=0; i<15; i++)
    15     {
    16         m=0;
    17         for(j=20; j>=0; j--)
    18         {
    19             k=a[i]/b[j];
    20             a[i]-=k*b[j];
    21             m+=k;
    22         }
    23         c[i]=m;
    24         cout<<c[i]<<' ';
    25     }
    26     cout<<endl;
    27     for(i=0; i<12; i++)
    28     {
    29         m=0;
    30         for(j=20; j>=0; j--)
    31         {
    32             k=d[i]/b[j];
    33             d[i]-=k*b[j];
    34             m+=k;
    35         }
    36         e[i]=m;
    37         cout<<e[i]<<' ';
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    PHP做Web开发的MVC框架(Smarty使用说明 )
    PHP + Smarty + html5 构建Wap应用
    HTML5游戏中动画帧的概念理解
    [转]jQuery选择器 (详解)
    2014马年应该有怎么样的学习方式和思考原则
    html5视频播放解决方案
    html5学习摘要
    sqlserver2008行锁
    关于一些url中传递参数有空格问题
    MongoDB和Redis区别
  • 原文地址:https://www.cnblogs.com/Fantastic-Code/p/8366959.html
Copyright © 2011-2022 走看看