Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <cstdio>#include <cstring>#define max(a, b) b - ( (b-a) & ( (b-a) >> 31) )int n, m, c[501], w[501], dp[100001], ans, sumc = 0;void geti(int &x){int num = 0;char c = getchar();while (c<'0' || c>'9')c = getchar();for (; c>='0'&&c<='9'; c = getchar())num = num * 10 + c - '0';x = num;}void read(){geti(n); geti(m);for (int i=0; i<n; i++)geti(c[i]), geti(w[i]), sumc+=c[i];}void knapsack01_contant_optimize(){int limit, res=m-sumc;for (int i=0; i<n; i++){limit=max(res, c[i]);for (int j=m; j>=limit; j--)if (dp[j-c[i]]+w[i]>dp[j])dp[j]=dp[j-c[i]]+w[i];res+=c[i];}