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. Python 生成图片验证码

    验证码图片生成 #!/usr/bin/env python # -*- coding: utf-8 -*- # refer to `https://bitbucket.org/akorn/wheezy ...

  2. 基于RabbltMQ延迟插件实现延迟队列代码示例

    上一篇文章写了docker安装RabbitMQ及延迟插件的安装,这篇的话是基于RabbitMQ延迟插件实现延迟队列的示例 那么废话不多说 直接上代码!! 首先创建延迟队列配置类 DelayedQueu ...

  3. 覆盖率检查工具:JaCoCo 食用指南

    一:概述 众所周知,软件的代码覆盖率是衡量软件质量的重要指标, 我们今天简单介绍 JaCoCo 的实际使用示例,它是目前在大多数 Java 项目中应用最广泛的覆盖率检测框架 更多资料参考:JaCoCo ...

  4. 2 Elment Ui 日期选择器 格式化问题

    Elment Ui 日期选择器 格式化问题 在前后端联调过程中 我们常常会遇到日期无法被反序列化 这个问题 会有点头疼 下面以我这边为例 后端使用的是springboot 默认集成了jackjson ...

  5. 2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?

    作者:小林coding 计算机八股文网站:https://xiaolincoding.com/ 大家好,我是小林. 从这篇「执行一条 SQL 查询语句,期间发生了什么?」中,我们知道了一条查询语句经历 ...

  6. 从0到1搭建一款页面自适应组件(Vue.js)

    组件将根据屏幕比例及当前浏览器窗口大小,自动进行缩放处理. 建议在组件内使用百分比搭配flex进行布局,以便于在不同的分辨率下得到较为一致的展示效果.使用前请注意将body的margin设为0,否则会 ...

  7. 2022giao考游记

    Day -12: 今年高考准备去考着玩玩,考前心态十分稳健.~~毕竟我才高一/cy~~ 这次高考我倒是没啥目标,主要是来试试水,感受一下高考的氛围,体会一下自己和高三应届生们的水平的差距.也算是丰富自 ...

  8. bat-命令行配置静态IP地址

    查看连接名称ipconfig 打开命令提示符,输入netsh后回车 输入interface后回车 输入ip,回车 输入set address "连接名称" static 新IP地址 ...

  9. python基础教程:__call__用法

    __call__可以使得方法变成可被调用对象:(PS:python中的方法和普通函数有点区别:方法的第一个参数是类实例) 允许一个类的实例像函数一样被调用.实质上说,这意味着 x() 与 x.call ...

  10. 《AlignedReID:Surpassing Human-Level Performance in Person Re-Identification》理解