AcWing 11. 背包问题求方案数-java
原题链接
中等
作者:
莫得感情的刷题机器
,
2020-08-28 09:47:39
,
所有人可见
,
阅读 580
import java.util.*;
public class Main{
public static void main(String [] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int V=sc.nextInt();
int mod=(int)(Math.pow(10,9)+7);
int[][] f=new int[V+1][2];
f[0][0]=1;
for(int i=1;i<=n;i++){
int v=sc.nextInt();
int w=sc.nextInt();
for(int j=V;j>=v;j--){
if(f[j][1]==f[j-v][1]+w){
f[j][0]=(f[j][0]+f[j-v][0])%mod;
}else{
if(f[j][1]<f[j-v][1]+w) {
f[j][0]=f[j-v][0]%mod;
f[j][1]=f[j-v][1]+w;
}
}
}
}
int res=f[V][0];
for(int i=1;i<V;i++){
if(f[i][1]==f[V][1]) res+=f[i][0];
}
System.out.println(res);
}
}