Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <bits/stdc++.h>#define maxn 100010#define INF 0x3f3f3f3fusing namespace std;int m, n, mp[11][11], dp[maxn];void opack(int c,int w){for(int i=m;i>=c;i--)dp[i] = max(dp[i], dp[i-c]+w);}void cpack(int c,int w){for(int i=c;i<=m;i++)dp[i] = max(dp[i], dp[i-c]+w);}void dpack(int c,int w){int num = mp[c][w];if(c*num >= m){cpack(c, w);return ;}int t = 1;while(t<num){opack(t*c, t*w);num -= t;t *= 2;}opack(num*c, num*w);}int main(){int a, b;scanf("%d%d", &n, &m);for(int i=0;i<n;i++){