动态规划算法--找零方式

一、问题介绍

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

二、算法思路

         枚举法,列出使用某张钞票n次的所有可能。

1、暴力递归

int process1(int n,int arr[], int index, int rest)
{
	if (index == n)
		return rest == 0 ? 1 : 0;
	int ways = 0;
	//枚举选择每种货币张的情况
	for (int zhang = 0; arr[index] * zhang <= rest; zhang++)
		ways += process1(n, arr, index + 1, rest - zhang * arr[index]);
	return ways;
}

2、动态规划

        每一个位置都依赖它下面从左往右的位置。所有每行从左往右,整体从下往上。

int dp[100][100];
int process2(int n, int arr[], int ai

你可能感兴趣的:(数据结构和算法实战宝典,算法,动态规划,c++)