通過滾動陣列來求出和 。
而不是用揹包來求最優
[cpp]view plain
copy
//從前乙個轉態轉移過來,選還是不選
for(
inti=1; i<=n; i++)
else
f[i][j]=f[i-1][j];
} }
//一維滾動陣列
for(
inti=1; i<=n; i++)
for(
intj=m; j>=1; j--)
if(weight[i]<=j)
f[j]=max(f[j],f[j-weight[i]]+value[i]);
3.完全揹包
[cpp]
view plain
copy
//每件物品可以使用無數次,求最大值
memset(dp,-inf,sizeof
(dp));
dp[0]=0;
for(
inti=0;i
for(
intj=c[i];j<=v;j++)
dp[j]=max(dp[j],dp[j-c[i]]+w[i]);
#include using namespace std;int main()
,i,j;
a[0]=1;
for(i=0;i<3;i++)
while(cin>>n)
return 0;
}
51nod 1101 換零錢 (0 1揹包,DP)
1101 換零錢 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 n元錢換為零錢,有多少不同的換法?幣值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元。例如 5分錢換為零錢,有以下4種換法 1 5個1分 2 1個2分3個1分 3 2個2分1...
51nod 1101換零錢(揹包)
n元錢換為零錢,有多少不同的換法?幣值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元。例如 5分錢換為零錢,有以下4種換法 1 5個1分 2 1個2分3個1分 3 2個2分1個1分 4 1個5分 由於結果可能會很大,輸出mod 10 9 7的結果 input 輸入1個數n,n...
換零錢 見解
n元錢換為零錢,有多少不同的換法?幣值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元。例如 5分錢換為零錢,有以下4種換法 1 5個1分 2 1個2分3個1分 3 2個2分1個1分 4 1個5分 由於結果可能會很大,輸出mod 10 9 7的結果 input 輸入1個數n,n...