Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N(1 ≤ N≤ 3,402) available charms. Each charm iin the supplied list has a weight Wi(1 ≤ Wi≤ 400), a 'desirability' factor Di(1 ≤ Di≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no more than M(1 ≤ M≤ 12,880).
Given that weight limit as a constraint and a list of the charms with their weights and desirability rating, deduce the maximum possible sum of ratings.
Lines 2..N+1: Line i+1 describes charm i with two space-separated integers: W i and D i
4 6 1 4 2 6 3 12 2 7
23
典型的背包问题,第一次在主函数里数组开太大,改成全局数组
#include<iostream> #include<cstring> using namespace std; int D[3405],W[3405]; int A[12885]; int main() { int N,M,j,i; cin >> N >> M; for(i = 1; i <= N; ++i) cin >> W[i] >> D[i]; memset(A,0,sizeof(A)); for(i = 1; i <= N; ++i) { for(j = M; j >= W[i]; --j) { if(A[j-W[i]] + D[i] > A[j]) A[j] = A[j-W[i]] + D[i]; else A[j] = A[j]; } } cout << A[M]; system("pause"); return 0; }