有 n 种面额不同的邮票,面额分别为 C1,C2,C3……Cn。面额 Ci 的邮票最多可以取 Mi 张。请问,用这些邮票,可以贴出多少面额不同的邮资 (包括 0)。贴邮票时,邮票不必全部使用。
输入格式
本题有多组数据,第一行为一个整数 t,表示有 t 组测试数据。
每组测试数据的第一行为一个整数 n,表示有多少种不同面额的邮票。(1<=N<=10)
第二行有 n 个整数,分别表示第 C1,C2….Cn 种不同面额。(1<=Ci<=20)
第三行有 n 个整数,分别表示面额为 Ci 的邮票有 Mi 张。(1<=Mi<=20)
输出格式
每组数据输出一行,每行一个整数,表示可以贴出多少种不同的面额。
样例
input
2
2
1 2
2 1
1
2
1
output
5
2
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
for(int i=0;i<N;i++){
int n=sc.nextInt();
int[] arr=new int[n];
int m=sc.nextInt();
for(int j=0;j<n;j++){
arr[j]=sc.nextInt();
}
Arrays.sort(arr);
System.out.println(helper(arr,m));
}
}
public static int helper(int[] arr,int target){
int sum=0;
for(int i=0;i<arr.length-2;i++){
int t=target-arr[i];
int l=i+1;
int r=arr.length-1;
while(l<r){
if(arr[l]+arr[r]<=t) {
sum=Math.max(sum,arr[i]+arr[r]+arr[l]);
l++;
}else{
r--;
}
}
}
return sum;
}
}