HDU -1284钱币兑换

时间:2023-03-10 07:19:04
HDU -1284钱币兑换

这个是完全背包的基础题, 模拟换钱, 刚开始状态方程写错了,我直接写dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3], 然后想了想感觉太大了,不太对,后来看网上的代码看着两层for循环,基本是一样的,为什么我的不对啊,然后手工模拟了一个小例子,发现,这种状态转移方程算重了,多加了好多重复的,因为完全背包和01背包代码的的区别,就是第二层for循环的顺序,所以这个题也不例外,这个题是完全背包,因为它可以无限取,代码如下

 #include <iostream>
#include <cstring> using namespace std;
const int N = ;
long long dp[N];
int main()
{
//预处理
dp[] = ;
for (int i = ; i <= ; i++)
{
for (int j = i; j <= N; j++)
dp[j] += dp[j - i];
}
int n;
while (cin >> n)
{
cout << dp[n] << endl;
} return ;
}