牛客 练习赛128 B题,我想用加偏移量的方法来写,搞了一上午,不知道哪里错了
#include<bits/stdc++.h>
using namespace std;
const int N=510,M=250010,B=M/2;
int n,k;
int dp[M];
int a[N],b[N];
int main()
{
cin>>n>>k;
int m=n*k;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
b[i]-=k;
}
memset(dp, -0x3f, sizeof dp);
dp[B] = 0;
for(int i=1;i<=n;i++){
for(int j=m;j>=b[i]-m;j--){
dp[j+B]=max(dp[j+B],dp[j-b[i]+B]+a[i]);
}
}
cout<<dp[B];
return 0;
}