问题描述
你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN。
请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。
输入格式
输入的第一行包含一个整数 N。
第二行包含 N 个整数:W1,W2,W3,⋅⋅⋅,WN。
输出格式
输出一个整数代表答案。
样例输入
3
1 4 6
样例输出
10
样例说明
能称出的 10 种重量是:1、2、3、4、5、6、7、9、10、11。
1=1;
2=6−4(天平一边放 6,另一边放 4)
3=4−1;
4=4;
5=6−1;
6=6;
7=1+6;
9=4+6−1;
10=4+6;
11=1+4+6。
评测用例规模与约定
对于 5050的评测用例,1≤N≤15。
对于所有评测用例,1≤N≤100,N个砝码总重不超过 100000。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n=scan.nextInt();
int sum=0;
int ans=0;
int[][] biaoji=new int[2][100001];
while(n>0){
n--;
int weight=scan.nextInt();
sum=sum+weight;
for(int i=1;i<=sum;i++){
if(biaoji[0][i]==1){
int x=Math.abs(weight-i);
biaoji[1][x]=1;
biaoji[1][weight+i]=1;
}
}
for(int i=1;i<=sum;i++){
if(biaoji[1][i]==1){
biaoji[0][i]=1;
}
}
biaoji[0][weight]=1;
}
for(int i=1;i<=sum;i++){
if(biaoji[0][i]==1){
ans++;
}
}
System.out.println(ans);
scan.close();
}
}
该文章介绍了一种算法,利用Java编程实现,通过天平和给定的N个砝码(权重递增)计算可以称出的不同重量数量,使用二进制数组存储每个可能重量的出现情况。
332

被折叠的 条评论
为什么被折叠?



