• 一道算法题-换钱


      题目:给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim代表要找的钱数,求换钱有多少种方法。代码如下:

      

      1 #include<iostream>
      2 #include<vector>
      3 using namespace std;
      4 //动态规划
      5 class Exchange {
      6 public:
      7     int countWays(vector<int> penny, int n, int aim) 
      8     {
      9         if(n==0||aim<0)
     10             return 0;
     11         int **map=new int*[n];
     12         for(int i=0;i<n;i++)
     13             map[i]=new int[aim+1];
     14         for(int i=0;i<n;i++)
     15             for(int j=0;j<aim+1;j++)
     16                 map[i][j]=-1;
     17         for(int i=0;i<n;i++)
     18             map[i][0]=1;
     19         for(int i=0;i<aim+1;i++)
     20             if(i%penny[0]==0)
     21                 map[0][i]=1;
     22             else 
     23                 map[0][i]=0;
     24         for(int i=1;i<n;i++)
     25             for(int j=1;j<aim+1;j++)
     26                 if((j-penny[i])>=0)
     27                     map[i][j]=map[i][j-penny[i]]+map[i-1][j];
     28                 else
     29                     map[i][j]=map[i-1][j];
     30         return map[n-1][aim];
     31     }
     32 
     33 };
     34 
     35 
     36 /*记忆搜索
     37 class Exchange {
     38 public:
     39     int countWays(vector<int> penny, int n, int aim) 
     40     {
     41         if(n==0||aim<0)
     42             return 0;
     43         int **map=new int*[n];
     44         for(int i=0;i<n;i++)
     45             map[i]=new int[aim+1];
     46         for(int i=0;i<n;i++)
     47             for(int j=0;j<aim+1;j++)
     48                 map[i][j]=-1;
     49         return process(penny,0,aim,map);
     50 
     51     }
     52     int process(vector<int> arr,int index,int aim,int **map)
     53     {
     54         int res;
     55         if(arr.size()-1==index)
     56         {
     57             if(map[index][aim]==-1)
     58                 map[index][aim]=(aim%arr[index])?0:1;
     59             return map[index][aim];
     60         }
     61         else
     62         {
     63             res=0;
     64             int k=aim/arr[index];
     65             for(int i=0;i<=k;i++)
     66             {
     67                 if(map[index+1][aim-i*arr[index]]==-1)
     68                     map[index+1][aim-i*arr[index]]=process(arr,index+1,aim-i*arr[index],map);
     69                 res+=map[index+1][aim-i*arr[index]];
     70             }
     71         }
     72         return res;
     73     }
     74 };*/
     75 
     76 /*暴力搜索
     77 class Exchange {
     78 public:
     79     int countWays(vector<int> penny, int n, int aim) 
     80     {
     81         if(n==0||aim<0)
     82             return 0;
     83         return process(penny,0,aim);
     84 
     85     }
     86     int process(vector<int> arr,int index,int aim)
     87     {
     88         int res;
     89         if(arr.size()-1==index)
     90         {
     91             res=(aim%arr[index])?0:1;
     92             return res;
     93         }
     94         else
     95         {
     96             res=0;
     97             int k=aim/arr[index];
     98             for(int i=0;i<=k;i++)
     99                 res+=process(arr,index+1,aim-i*arr[index]);
    100         }
    101         return res;
    102     }
    103 };*/
    104 
    105 int main()
    106 {
    107     int a[3]={1,2,3};
    108     vector<int> arr(a,a+3);
    109     Exchange e;
    110     cout<<e.countWays(arr,3,3);
    111     
    112     return 0;
    113 }

      

  • 相关阅读:
    都在谈零信任,网络安全和零信任架构的核心是什么?
    盘点:区块链有望被主流接纳的四个场景
    同态加密:密码学的下一个黄金时代
    浅谈人工智能应对数字化转型挑战的5个领域
    2021年7项物联网预测
    15分钟=1年!当人工智能遇到材料学……
    人工智能推理的演进
    保护加密货币资产的7种优秀做法
    ES6语法 Promise Iterator
    css阴影框
  • 原文地址:https://www.cnblogs.com/smile233/p/8848260.html
Copyright © 2020-2023  润新知