Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <string>#include <vector>#include <limits.h>#include <algorithm>#include <cstring>#include <math.h>using namespace std;long long Wi[100100];long long Pi[100100];int main() {//freopen("E:\\input.txt", "r", stdin);int N,M;scanf("%d %d", &N,&M);for (int i = 1; i <= N; i++)scanf("%d %d", &Wi[i], &Pi[i]);vector<vector<long long>> dp(2, vector<long long>(M + 1, 0));int cur = 0;for (int i = 1; i <= N; i++) {cur = 1 - cur;int pre = 1 - cur;for (int j = M; j >= 0; j--) {if (j < Wi[i]) {dp[cur][j] = dp[pre][j];continue;}dp[cur][j] = max(dp[pre][j], dp[pre][j - Wi[i]] + Pi[i]);