zoukankan      html  css  js  c++  java
  • POJ1837 Balance 动态规划

    题意:有这样的一个天平,关于天平的中心两边有一些钩子,钩子有一个属性就是离中心的距离。题中给定的是设中心的坐标为0,左右两边分别是负数和正数的坐标值。现在给定一些砝码,问将这些砝码都挂到天平上,使得天平保持平衡的方式有多少种?一个钩子上可以连续挂上多个砝码。

    解法:首先将所有钩子的坐标都加上15,然后使得最后砝码乘以坐标的总和等于总质量乘以15。这样原问题就转化为一个类似于背包的问题了。

    代码如下:

    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    using namespace std;
    
    int sta, N, M;
    int h[25], g[25];
    int f[25][15005];
    // f[i][j]表示到第i件物品,重量为j的种数有多少种 
    
    void solve() {
        memset(f, 0, sizeof (f));
        f[0][0] = 1;
        for (int i = 1; i <= M; ++i) {
            for (int j = 0; j <= sta; ++j) {
                for (int k = 1; k <= N; ++k) {
                    if (j >= g[i]*h[k]) {
                        f[i][j] += f[i-1][j-g[i]*h[k]];
                    }
                }
            }
        }
        printf("%d\n", f[M][sta]);
    }
    
    int main() {
        while (scanf("%d %d", &N, &M) != EOF) {
            sta = 0;
            for (int i = 1; i <= N; ++i) {
                scanf("%d", &h[i]); // 钩子
                h[i] += 15;
            }
            for (int i = 1; i <= M; ++i) {
                scanf("%d", &g[i]); // 砝码 
                sta += g[i];
            }
            sta *= 15;
            solve();
        }
        return 0;    
    }
  • 相关阅读:
    php---观察者模式
    elasticsearch常用查询和注意点
    linux镜像iso格式
    Mysql查询今天、昨天、7天、近30天、本月、上一月数据
    php常用算法
    算法之斐波纳契数列递归和迭代实现
    带你了解session和cookie作用原理区别和用法
    mysql大数据量的分页优化
    常用链接
    自然语言处理
  • 原文地址:https://www.cnblogs.com/Lyush/p/2979708.html
Copyright © 2011-2022 走看看