/************************************* * Knapsack (DP solution) TC - O(n*W) * @author Amirul Islam (shiningflash) ************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /**Define memory set function**/ #define mem(x,y) memset(x,y,sizeof(x)) #define CLEAR(x) memset(x,0,sizeof(x)) /**Define function and object**/ #define pb push_back #define Sort(v) sort(v.begin(),v.end()) #define _sort(s, n) sort(s, s+n) #define sqr(x) ((x)*(x)) /**Define constant value**/ #define le 5001 #define ERR 1e-9 #define pi (2*acos(0)) #define PI 3.141592653589793 /**Define input**/ #define scanint(a) scanf("%d",&a) #define scanLLD(a) scanf("%lld",&a) typedef unsigned long long ll; using namespace std; /**********************End*******************/ int w[] = {10, 20, 30}; int val[] = {60, 100, 120}; int knapsack(int W, int n) { int dp[n+1][W+1]; for (int i = 0; i <= n; i++) dp[i][0] = 0; for (int i = 0; i <= W; i++) dp[0][i] = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= W; j++) { if (w[i-1] <= W) dp[i][j] = max(val[i-1] + dp[i-1][j-w[i-1]], dp[i-1][j]); else dp[i][j] = dp[i-1][j]; } } return dp[n][W]; } int main() { int n = 3, W = 50; cout << knapsack(W, n) << endl; }