題意 輸入兩個數 len,n 表示長度和個數,接下來輸入n個數, 表示每乙個的長度, 求這n個數能夠組成的不超過len的最大長度,並輸出這些數。
分析:01揹包,dp陣列非0表示可以組成的數,dp陣列用來記錄路徑
#include #include#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 2005
;int a[22
];int
dp[maxn];
intmain()
dp[0] = 1
;
int max = 0
;
for(int i=n; i>=1; i--)}}
while(dp[len]==0
) len--;
max =len;
while
(len)
printf(
"sum:%d\n
", max);
}return0;
}
UVA 624 CD 0 1揹包問題
name uva 624 cd author zj ac date 26 03 13 15 15 description 01backpack problem include include include include include using namespace std int maxval...
UVA 624 CD 01揹包問題
解題思路 01揹包問題,路徑比較難,用乙個陣列記錄,陣列儲存的是前m 1的數的和,那個和必然也是最大的,輸出的時候進行判斷,如果是小於那個數的,就不符合條件。感覺01揹包題目,如果是有限個數量的話,就用二維陣列表示狀態,如果是無限的話,就用一維的表示,uva 10465就是無限個的 include ...
uva 624 CD 0 1揹包列印路徑
include include include include using namespace std const int inf 1000000 define n 1000000 int dp 22 n int a 22 int n,t void printf path vector v,int ...