LQ0033 砝码称重DP

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0033 砝码称重DP相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2021初赛 C++ A组F题

题目描述
你有一架天平和N 个砝码,这N 个砝码重量依次是W1, W2, … , WN。
请你计算一共可以称出多少种不同的重量?
注意砝码可以放在天平两边。
输入格式
输入的第一行包含一个整数N。
第二行包含N 个整数:W1, W2, W3, … , WN。
对于50% 的评测用例,1 ≤ N ≤ 15。
对于所有评测用例,1 ≤ N ≤ 100,N 个砝码总重不超过100000。

输出格式
输出一个整数代表答案。
输入样例
3
1 4 6
输出样例
10

问题分析
DP问题,不解释。

AC的C语言程序如下:

/* LQ0033 砝码称重 */

#include <stdio.h>
#include <stdlib.h>

#define N 100 + 1
#define M 100000 + 1
int w[N];
char dp[N][M];

int main()

    int n, sum = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) 
        scanf("%d", &w[i]);
        sum += w[i];
    

    dp[0][0] = 1;
    for (int i = 1; i <= n; i++)
        for (int j = 0; j <= sum; j++)
            dp[i][j] = dp[i - 1][j] || dp[i - 1][j + w[i]] || dp[i - 1][abs(j - w[i])];

    int cnt = 0;
    for (int i = 1; i <= sum; i++)
        if (dp[n][i]) cnt++;

    printf("%d\\n", cnt);

    return 0;

以上是关于LQ0033 砝码称重DP的主要内容,如果未能解决你的问题,请参考以下文章

LQ0256 5个砝码DFS

LQ0256 5个砝码DFS

p1633[进制应用]砝码称重

枚举 天平称重

天平称重

Java-天平称重