상자 쌓기 문제의 동태적 기획
/* : dp[i][j] := i n j, dp[i][j] = max(dp[i][j], dp[i+1][j - weight[i]] + 1) */
1 #include <iostream>
2 #include <fstream>
3 #include <sstream>
4 #include <cstdlib>
5 #include <cstdio>
6 #include <cstddef>
7 #include <iterator>
8 #include <algorithm>
9 #include <string>
10 #include <locale>
11 #include <cmath>
12 #include <vector>
13 #include <cstring>
14 #include <map>
15 #include <utility>
16 #include <queue>
17 #include <stack>
18 #include <set>
19 #include <functional>
20 using namespace std;
21 typedef pair<int, int> PII;
22 typedef long long int64;
23 const int INF = 0x3f3f3f3f;
24 const int modPrime = 3046721;
25 const double eps = 1e-9;
26 const int MaxN = 100010;
27 const int MaxM = 30;
28 const char Opt[4] = { '+', '-', '*', '/' };
29
30 int dp[6010];
31 /*
32 pW: 1 n (1 <= Wn <= 3000)
33 pM: 1 n (1 <= Mn <= 3000)
34 :
35 */
36 int CalcMaxNum(int n, int * pW, int * pM)
37 {
38 if ((n < 1) || (n > 900) || (NULL == pW) || (NULL == pM))
39 {
40 return 0;
41 }
42
43 int maxTotalWeight = 6000;
44 fill(dp, dp + maxTotalWeight + 1, 0);
45
46 for (int i = n - 1; i >= 0; --i)
47 {
48 for (int j = maxTotalWeight; j >= 0; --j)
49 {
50 if ((j >= pW[i]) && (j - pW[i] <= pM[i]))
51 {
52 dp[j] = max(dp[j], dp[j - pW[i]] + 1);
53 }
54 }
55 }
56 int ans = *max_element(dp, dp + maxTotalWeight + 1);
57 return ans;
58 }
59
60
61
62 int main()
63 {
64 #ifdef HOME
65 freopen("in", "r", stdin);
66 //freopen("out", "w", stdout);
67 #endif
68
69 int ws[] = {
70 19, 7, 5, 6, 1 };
71 int ms[] = {
72 15, 13, 7, 8, 2 };
73 int ret = CalcMaxNum(5,
74 ws,
75 ms);
76 (ret == 4);
77
78 #ifdef HOME
79 cerr << "Time elapsed: " << clock() / CLOCKS_PER_SEC << " ms" << endl;
80 _CrtDumpMemoryLeaks();
81 #endif
82 return 0;
83 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.