试题G: 蓝桥杯砝码称重
蓝桥杯砝码称重
【问题描述】
你有一架天平和N 个砝码,这N 个砝码重量依次是W1, W2…WN。
请你计算一共可以称出多少种不同的重量?
注意砝码可以放在天平两边。
数据范围
对于 50% 的评测用例,1≤N≤15。
对于所有评测用例,1≤N≤100,N 个砝码总重不超过 1e5。
都是整数
样例:
input:
3
1 4 6
output:
10
动态规划,每次状态转移dp[ i ][ j ] 表示加上第i个砝码 j 重量是否可以被称出,也就是当前用了1 到 i 种砝码。
j代表可能可以组合出的砝码的值,dp用0和1表示是否可以组合出,
i代表当前已选择的前i个砝码,利用上一个状态dp,表示当前加上第i个砝码的状态
注意:
更新:博主看了一下原题,把题目的数据范围加上了,数组一定要开到2e5。
为什么呢?
虽然砝码总重不超过 1e5,但是数组在循环中j从0枚举到sum,下标中存在sum+w[i],如果等于1e5会造成数组越界
#include <bits/stdc++.h>
using namespace std;
const long long inf = 0x7fffffffffffffff;
bool dp[106][200006]