PHP 动态规划 找零钱方法数

* Coins.php

<?php
/**
 * Created by PhpStorm.
 * User: Mch
 * Date: 9/18/18
 * Time: 10:38 PM
 */
class Coins {
    /**
     * @param array $arr
     * @param int $aim
     * @return int
     */
    public static function count(Array $arr, /* int */ $aim) {
        if (is_null($arr) || count($arr)==0 || $aim<0) {
            return 0;
        }
        $n = $aim+1;
        $dp = new \SplFixedArray($n);
        // init
        for ($j = 0; $j < $n; $j++) {
            $dp[$j] = 0;
        }
        for ($j = 0; $arr[0] * $j <= $aim; $j++) {
            $dp[$arr[0] * $j] = 1;
        }
        for ($i = 1; $i < count($arr); $i++) {
            for ($j = 1; $j <= $aim; $j++) {
                $dp[$j] += $j - $arr[$i] >= 0 ? $dp[$j - $arr[$i]] : 0;
            }
        }
        return $dp[$aim];
    }
}


* index.php

<?php
/**
 * Created by PhpStorm.
 * User: Mch
 * Date: 9/18/18
 * Time: 11:18 PM
 */
include './Coins.php';

$arr = [50, 20, 10, 5, 1];
$aim = 100;
$count = Coins::count($arr, $aim);
echo $count.PHP_EOL;

* test

$ php index.php

343

猜你喜欢

转载自blog.csdn.net/fareast_mzh/article/details/82765837