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 }
  • 相关阅读:
    java中不常见的keyword:strictfp,transient
    D3DXMatrixMultiply 函数
    expect
    char* 和char[]的差别
    下载安装tomcat6.0
    Eclipse或SVN—怎样在Eclipse中安装SVNclient插件
    sharepoint 訪问缩略图
    斜率优化专题1——bzoj 1597 [Usaco2008 Mar] 土地购买 题解
    phpmywind教程:关于日期函数调用整理
    linux服务之smtp
  • 原文地址:https://www.cnblogs.com/Fantastic-Code/p/8366959.html
Copyright © 2011-2022 走看看