[コードテストC+]おつり
今日の質問
金をさがす
私の答えを参照して回答した. 昨日解答した問題と同じで、考えがはっきりしないで、見るとDPであることを知っていて、 DPの核心は、これまでよくできていたことで、今回の手順を考えていたのですが、この手順で個々の演算を実行しようとすると、それ以前に実行した操作と重なると、問題は解決できません.これは順番ではなく組み合わせです2が先に出てくる1と1が先に出てくる2は違います からdfsで解決しようと思ったが、効率的にタイムアウトした.もちろん,nは100000以下の自然数であり,dfsですべての組合せを求めると大変なことになる. わあ、これはどういうことですか.最後にヒントを見ました.これですか. 最初のようにを実行すると、以前に実行された異なる演算の結果が反映され、各演算がDPを返すと、これらの結果は反映されません.順次追加これを見て、まだまだだと思います.
金をさがす
私の答え
#include <string>
#include <vector>
#include <algorithm>
#define MOD 1000000007;
using namespace std;
int solution(int n, vector<int> money) {
vector<int> dp(n+1, 0);
dp[0] = 1;
for(int i=0;i<money.size();i++){
for(int j= money[i];j<=n;j++){
dp[j] += dp[j-money[i]];
}
}
return dp[n];
}
模範解答
学ぶべきところReference
この問題について([コードテストC+]おつり), 我々は、より多くの情報をここで見つけました https://velog.io/@huijae0817/코딩테스트-C-거스름돈テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol