diff --git a/submissions/alequisk/README.md b/submissions/alequisk/README.md new file mode 100644 index 0000000..ae9626f --- /dev/null +++ b/submissions/alequisk/README.md @@ -0,0 +1,19 @@ +# COMO USAR + +Compile o arquivo ``solve-p1.cc`` com + +```sh +g++ -std=c++17 -O2 -o solve solve-p1.cc + +``` + +Após isso para resolver os casos de testes pode-se usar: + +```sh +./solve < ../../resources/instances/problem_01/exemplo_01.txt +./solve < ../../resources/instances/problem_01/exemplo_02.txt +./solve < ../../resources/instances/problem_01/exemplo_03.txt +``` + +Resolvido usando prgramação dinâmica como paradigma, uma vez que os limites da questão nos possibilitam fazer essa abordagem. +Outra técnica usada foi de tabulação com remoção de memória para que seja possível passar nos limites de recursos. \ No newline at end of file diff --git a/submissions/alequisk/solve-p1.cc b/submissions/alequisk/solve-p1.cc new file mode 100644 index 0000000..59772b0 --- /dev/null +++ b/submissions/alequisk/solve-p1.cc @@ -0,0 +1,39 @@ +#include + +#define MAXN 1000 +#define MAXW 2666 + +int N, W, i; +int S[MAXN + 1], V[MAXN + 1]; +int dp[2][MAXW + 1]; + +int main() { + std::ios_base::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::cin >> N >> W; + for (i = 1; i <= N; i++) { + std::cin >> S[i] >> V[i]; + } + + bool cur = false; + + for (i = 0; i <= W; i++) { + dp[0][i] = dp[1][i] = 0; + } + + for (i = 1; i <= N; i++) { + cur = !cur; + for (int j = 0; j <= W; j++) { + if (S[i] > j) { + dp[cur][j] = dp[!cur][j]; + } else { + dp[cur][j] = std::max(dp[!cur][j - S[i]] + V[i], dp[!cur][j]); + } + } + } + + std::cout << dp[cur][W] << '\n'; + + return 0; +} \ No newline at end of file