记忆递归
private int[] f = new int[200];
public int numWays(int n) {
if(n==1){
return f[n]=1;
}else if(n==2){
return f[n]=2;
}
else
{
if(f[n]==0) f[n]=numWays(n-1)+numWays(n-2);
return f[n];
}
}
有序背包问题:
//外层为1~amount
for (int i=1;i<=amount;i++){
for (int j =0;j<coins.length;j++){
if(i>=coins[j]){dp[i] = dp[i]+dp[i-coins[j]];}
}
}
无序背包问题:
//先考虑装入能装多少个1元的硬币
for (int j =0;j<coins.length;j++) {
for (int i=1;i<=amount;i++) {
if(i>=coins[j]){dp[i] = dp[i]+dp[i-coins[j]];}
}
}