#include#include using namespace std; int knapsack(int W, vector wt, vector val, int n) { vector > dp(n+1, vector (W+1, 0)); for (int i = 0; i <= n; i++) { for (int w = 0; w <= W; w++) { if (i == 0 || w == 0) { dp[i][w] = 0; } else if (wt[i-1] <= w) { dp[i][w] = max(val[i-1] + dp[i-1][w-wt[i-1]], dp[i-1][w]); } else { dp[i][w] = dp[i-1][w]; } } } return dp[n][W]; } int main() { vector val = {60, 100, 120}; vector wt = {10, 20, 30}; int W = 50; int n = val.size(); cout << knapsack(W, wt, val, n) << endl; return 0; }
#includeThis code uses the standard C++ library and does not require any additional packages or libraries.#include using namespace std; const int INF = 1000000000; int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1}; vector > maze = { {0, 0, 0, 0, 0}, {1, 1, 0, 1, 1}, {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {0, 0, 0, 0, 0} }; int sx = 0, sy = 0; int gx = 4, gy = 4; int d[5][5]; struct P { int x, y; }; struct State { P p; int cost; bool operator<(const State& s) const { return cost > s.cost; } }; void dijkstra() { priority_queue que; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { d[i][j] = INF; } } d[sx][sy] = 0; que.push({{sx, sy}, 0}); while (!que.empty()) { State s = que.top(); que.pop(); P p = s.p; if (p.x == gx && p.y == gy) break; for (int i = 0; i < 4; i++) { int nx = p.x + dx[i], ny = p.y + dy[i]; if (nx >= 0 && nx < 5 && ny >= 0 && ny < 5 && maze[nx][ny] == 0 && d[nx][ny] > d[p.x][p.y] + 1) { d[nx][ny] = d[p.x][p.y] + 1; que.push({{nx, ny}, d[nx][ny] + (gx-nx)*(gx-nx) + (gy-ny)*(gy-ny)}); } } } } int main() { dijkstra(); cout << d[gx][gy] << endl; return 0; }