dp[i][j]:表示从1~i件物品中选,体积恰好为j的最大值。(不超过j的写法?)
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int N=1010;
int dp[N];
int f[N];
int main(){
int n,v;
cin>>n>>v;
memset(dp,-0x3f,sizeof(dp));
dp[0]=0;
f[0]=1;
for(int i=1;i<=n;i++){
int vi,wi;
cin>>vi>>wi;
for(int j=v;j>=vi;j--){
if(dp[j]>dp[j-vi]+wi){
dp[j]=dp[j];
f[j]=f[j]%mod;
}
else if(dp[j]<dp[j-vi]+wi){
dp[j]=dp[j-vi]+wi;
f[j]=f[j-vi]%mod;
}
else{
dp[j]=dp[j-vi]+wi;
f[j]=(f[j-vi]+f[j])%mod;
}
}
}
int res=0;
for(int i=1;i<=v;i++){
if(dp[i]>dp[res]){
res=i;
}
}
int sum=0;
for(int i=0;i<=v;i++){
if(dp[i]==dp[res]){
sum=(sum+f[i])%mod;
}
}
cout<<sum;
return 0;
}