leetcode [インタビューの質問08.11。コイン]

Leetcodeインタビューの質問08.11。コイン

アイデアについては、こののを参照してください

一見するとdpで書かれているように感じられます。nポイントの表現の数を質問すると、最後のコインの額面jを与えると、質問はnjポイントの数に変換されます表記なので、副問題になります。

最初は、額面金額を使用してコインスキームの数を決定することを考えていました。転送方程式は、dp [i] =(dp [i-1] + dp [i-5] + dp [i-10] + dp [i-25]です。 )dp [i]はスキームのポイント数を意味しますが、伝達方程式dp [6] = dp [5] + dp [1] = 3の場合、これは6など間違っていますが、実際の答えは2です。 、実際の6は5 1と1 1 1 1 1 1 1で構成されていますが、dp伝達方程式に従って記述された場合、6は5 1と1 5と1 1 1 1 1 1で構成されます。数が多いとわかったら、このように書くのは間違いです

方法:額面金額を決定するためにコインを使用することを選択し、最終結果の各ソートが低下してはならず、重み付けなしで実行できます

const int maxn = 1e6+50;
const int MOD = 1e9+7;
int dp[maxn];
class Solution {
public:
    int num[4] = {1,5,10,25}; 
    int waysToChange(int n) {
        memset(dp,0,sizeof(dp));
        dp[0] = 1;
        for(int i = 0; i < 4; i++){
            for(int j = 1; j <= n; j++){
                if(j >= num[i]) dp[j] = (dp[j]+dp[j-num[i]])%MOD;
            }
        }
        return dp[n];
    }
};

概要:動的な計画を作成するときに、アイデアが間違っているか不完全であることがわかった場合は、元のアイデアの抜け穴を埋めるのではなく、方向を変えて問題について考える必要があります

おすすめ

転載: www.cnblogs.com/Beic233/p/12760370.html