Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>using namespace std;int need[500];int value[500];int dp[500][100001];int main(){int N,M;cin>>N>>M;for(int i = 0; i < N; ++i){cin>>need[i]>>value[i];}for(int i = need[0]; i<=M; ++i){dp[0][i] = value[0];}for(int i = 1; i < N; ++i){for(int j = 0; j < need[i]; ++j){dp[i][j] = dp[i-1][j];}for(int j = need[i]; j<=M; ++j){int left = dp[i-1][j];int right = dp[i-1][j-need[i]]+value[i];dp[i][j] = left>right?left:right;}