1.题目

POJ-1837

2.题目大意

一个天平上有一些钩子,现在有一些砝码。给出每个钩子到原点(姑且这么叫吧)的距离(-15 ~ 15,负数代表在左边,正数相反)以及砝码的重量(1 ~ 20),求出把所有的砝码挂上天平并且让天平保持平衡的方案数。

3.分析

显然,暴力枚举必然会TLE。那么,看到方案总数四个数就想到了数论和DP。

在这道题里,可以看出要用DP。

设\(f_{i,j}\)为:把前 \(i\) 个砝码全部放到天平,倾斜度为 \(j\) 的方案总数。

规定正数为向右偏,负数为向左偏。

这里讲一下输入数据对于答案的贡献:如果第 \(i\) 个砝码放在 \(dis_k\) 的位置时,它的倾斜度为:dis[k]*wei[i]

那么,必然有负数下标,所以改用Pascal所以要把所有 \(j\) 加上一个数,使得全是正数。考虑题目的极限数据:距离范围最大15,重量范围最大25,个数范围最大20,所以极限倾斜度为:\(15 \times 25 \times 20=7500\)。所以,所有的 \(j\) 都要加上7500。答案为:\(f_{n,7500}\)。

假设我们已经成功的推出了 \(f_{i-1,j}\) 考虑转移方程。显然,我们可以枚举第 \(i\) 个砝码的位置,所以所有的位置都要试一遍。假设我们放在第 \(k\) 个位置,\(j=j+dis_k \times wei_i\)。那么,现在仅仅是多放第 \(i\) 个砝码在第 \(k\) 个位置,所以方案数是没有变动的。换而言之,\(f_{i,j+dis_k \times wei_i}\)是要继承\(f_{i-1,j}\)的方案总数的。

注意,这里我们是 \(f_{i-1,j} \to f_{i,j+dis_k \times wei_i}\) 的,因为 \(k\) 是有变动的,所以 \(f_{i-1,j}\)有对多个状态有贡献。它们必然会形成一张复杂的网,那么对同一个状态重复贡献,所以需要把贡献给加起来。其实最好的办法就是当 \(f_{i-1,j} \to f_{i,j+dis_k \times wei_i}\)时,做一个操作f[i][j+dis[k]*wei[i]]+=f[i-1][j]

4.代码

如果还是看不懂,看看代码吧。

抄袭可耻!!!

4.1dp代码

for(int i=1;i<=n;++i)
for(int j=0;j<=15000;++j)
for(int k=1;k<=m;++k)
f[i][j+dis[k]*wei[i]]+=f[i-1][j];

4.2AC代码

#include<cstdio>
#include<cstring>
using namespace std;
int m,n,dis[23],wei[23],f[23][15003];
int main()
{
scanf("%d%d",&m,&n);
for(int i=1;i<=m;++i) scanf("%d",&dis[i]);
for(int i=1;i<=n;++i) scanf("%d",&wei[i]);
f[0][7500]=1;\\这里相当于一开始什么都没放
for(int i=1;i<=n;++i)
for(int j=0;j<=15000;++j)
for(int k=1;k<=m;++k)
f[i][j+dis[k]*wei[i]]+=f[i-1][j];
printf("%d",f[n][7500]);
}

5.参考文献

https://www.cnblogs.com/lyy289065406/archive/2011/07/31/2122629.html

[题解]Balance的更多相关文章

  1. 题解-USACO18DEC Balance Beam详细证明

    (翻了翻其他的题解,觉得它们没讲清楚这个策略的正确性) Problem 洛谷5155 题意概要:给定一个长为\(n\)的序列,可以选择以\(\frac 12\)的概率进行左右移动,也可以结束并得到当前 ...

  2. POJ2142:The Balance——题解

    http://poj.org/problem?id=2142 题目大意:有一天平和两种数量无限的砝码(重为a和b),天平左右都可以放砝码,称质量为c的物品,要求:放置的砝码数量尽量少:当砝码数量相同时 ...

  3. 题解 [USACO18DEC]Balance Beam

    被概率冲昏的头脑~~~ 我们先将样例在图上画下来: 会发现,最大收益是: 看出什么了吗? 这不就是凸包吗? 跑一遍凸包就好了呀,这些点中,如果i号点是凸包上的点,那么它的ans就是自己(第二个点),不 ...

  4. Codeforces Beta Round #17 C. Balance DP

    C. Balance 题目链接 http://codeforces.com/contest/17/problem/C 题面 Nick likes strings very much, he likes ...

  5. The Balance(母函数)

    The Balance Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  6. hdu_5616_Jam's balance(暴力枚举子集||母函数)

    题目连接:hdu_5616_Jam's balance 题意: 给你一些砝码,和一些要被称出的重量,如果这些砝码能称出来输出YES,否则输出NO 题解:我们想想,这题求组合方式,我们这里可以直接用母函 ...

  7. HDU 5616 Jam's balance(Jam的天平)

    HDU 5616 Jam's balance(Jam的天平) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ...

  8. Codeforces 1120 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 传送门 A题 传送门 题意简述:给你一个mmm个数的数列,现在规定把一个数列的1,2,...,k1,2,...,k1,2,...,k分成第一组,把k+1, ...

  9. codeforces 17C Balance(动态规划)

    codeforces 17C Balance 题意 给定一个串,字符集{'a', 'b', 'c'},操作是:选定相邻的两个字符,把其中一个变成另一个.可以做0次或者多次,问最后可以生成多少种,使得任 ...

随机推荐

  1. 二叉树遍历在Unity中的实现

    前言:今天放一天,想到要放国庆假了就心烦气躁,躺床上又焦虑,回想起面试官的一副扑克脸,马上跳起来看了看数据结构. 今天复习了二叉树,包括一些基本概念和特性,当看到二叉树遍历的章节时,马上联想到了Uni ...

  2. 写Selenium代码时一些技巧

    本文地址: https://www.cnblogs.com/hchengmx/p/10880002.html 1. Chrome插件之"CSS Selector Helper for Chr ...

  3. camunda开源流程引擎的数据库表结构介绍

    Camunda bpm流程引擎的数据库由多个表组成,表名都以ACT开头,第二部分是说明表用途的两字符标识.本文以Camunda7.11版本为例,共47张表. ACT_RE_*: 'RE'表示流程资源存 ...

  4. React + Typescript领域初学者的常见问题和技巧

    React + Typescript领域初学者的常见问题和技巧 创建一个联合类型的常量 Key const NAME = { HOGE: "hoge", FUGA: "f ...

  5. 23.Nginx+keepalived负载均衡高可用

    Nginx+keepalived负载均衡高可用 结构图 环境: 主 服务器:192.168.239.10 备 服务器:192.168.239.20 Web 服务器1:192.168.239.40 We ...

  6. 第二章、DHCP原理与配置

    目录 一.了解DHCP服务 1DHCP概述: 2DHCP好处 3DHCP的分配方式 二.DHCP工作过程 DHCP租约过程 三.使用 DHCP动态配置主机地址 1DHCP服务优点 2可分配的地址信息主 ...

  7. numpy学习笔记02

    简介 numpy.array() 数组对象,可以表示普通的一维数组,或者二维矩阵,或者任意数据:并且它可以对数组中的数据进行非常高效的运算,如:数据统计.图像处理.线性代数等 numpy 之所以能运行 ...

  8. sql-DCL用户及权限管理及其他常用命令-mysql

    查看系统信息 SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- 显示系统变量信息 SELECT now(), user(), version(); -- ...

  9. Python列表解析式的正确使用方式(一)

    先来逼逼两句: Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法.在本文中,将会展示列表解析式 (List Comprehension).我们将讨论如何使用它?什 ...

  10. windows10 安装MySQL ZIP版本

    今天重新学习了一下MySQL,但是呢刷题网站不知道为什么很卡,输入容易卡死崩溃,于是乎想在win10上面进行安装进行练习. 发现电脑里面没有,于是进行安装. 1.首先下载MySQL https://d ...