P1566 加等式

题目描述

对于一个整数集合,我们定义“加等式”如下:集合中的某一个元素可以表示成集合内其他元素之和。如集合{1,2,3}中就有一个加等式:3=1+2,而且3=1+2 和3=2+1是相同的加等式,也是这个集合唯一的加等式。给定一个整数集合,编程找出其所有的加等式的个数

输入输出格式

输入格式:

第一行为t,表示测试数据组数。(1≤t≤10);

接下来t 行,每行表示一组测试数据。其中第一个数m(1≤m≤30),表示集合元素的个数,接下来m 个不同的整数x 分别表示集合元素(1≤m≤1000)。

输出格式:

对于每个输入数据,输出一个整数,表示其中加等式的个数。

输入输出样例

输入样例#1: 复制

3
3 1 2 3
3 1 2 5
6 1 2 3 5 4 6
输出样例#1: 复制

1
0
7

洛谷题解:

使用01背包,求出方案总数。

f[c]=Σfc-w[i]

初始f[0]=1,其他f[i]=0

时间复杂度O(tm*max{x})

这道题是一道变形的01背包方法数问题。我们可以先求出每个数拆成其他数之和的方案总数,最后再相加。求每个数拆成其他数之和的状态转移方程是f[j]=sum(f[j],f[j-i]); 1<=i<=n a[i]<=j<=m(其中,m是所有数的最大的数)边界应是f[0]=1,最后把解算出来一定要减n!!!(因为还要去掉每个数自身的方案)

方便理解,我直接用程序打表就好,没必要空想。

每次都是用最后一样物品在试。

题目没看清,没说一定是两个数的和。

肯定会导致题目看不清。

 #include <bits/stdc++.h>//万能头文件
using namespace std;
int a[],f[];//数组a是存放读入的数,数组f存放的每个数的拆成其他数或自己之和的方案总数
int main()
{
int t;
cin>>t;
while(t--)//读入t组数据
{
int m=-,ans=,n;
memset(f,,sizeof(f));//别忘了初始化
cin>>n;
for(int i=; i<=n; i++)
{
cin>>a[i];
m=max(m,a[i]);//m存放最大数
}
f[]=;//边界
for(int i=; i<=n; i++)
{
for(int j=m; j>=a[i]; j--)//是从m递减到a[i],不要写反了,不然就是完全背包的方案数了。
f[j]+=f[j-a[i]];//套用状态转移方程
}
for(int j=; j<=n; j++)
{
ans+=f[a[j]];//累加每个数的拆成其他数或自己之和的方案数
}
cout<<ans-n<<endl;//还要减掉每个数自身的方案
}
return ;
}

P1566 加等式的更多相关文章

  1. 洛谷 P1566 加等式

    P1566 加等式 题目描述 对于一个整数集合,我们定义“加等式”如下:集合中的某一个元素可以表示成集合内其他元素之和.如集合{1,2,3}中就有一个加等式:3=1+2,而且3=1+2 和3=2+1是 ...

  2. luogu P1566 加等式

    题目描述 对于一个整数集合,我们定义"加等式"如下:集合中的某一个元素可以表示成集合内其他元素之和.如集合{1,2,3}中就有一个加等式:3=1+2,而且3=1+2 和3=2+1是 ...

  3. Luogu P1566 【加等式】

    看到这道题,我们首先注意到“找出其所有的加等式的个数”,自然地考虑运用计数DP求出若干数相加的和的个数 考虑将每个元素排序后DP处理若干数相加的和的个数 用f[i]表示 对于一个数a[i],对于前i- ...

  4. 【bzoj2118】 墨墨的等式

    http://www.lydsy.com/JudgeOnline/problem.php?id=2118 (题目链接) 题意 给出${B}$的取值范围${[Bmin,Bmax]}$,求方程${a_{1 ...

  5. RSA 加解密算法

    与DES不同,RSA算法中,每个通信主体都有两个钥匙,一个公钥一个私钥. 就是有2把钥匙1.使用publicKey可以对数据进行加密2.使用Key才能对数据进行解密单方向传输用公钥加密的数据,只有私钥 ...

  6. 数论+spfa算法 bzoj 2118 墨墨的等式

    2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1283  Solved: 496 Description 墨墨突然对等式很感兴 ...

  7. TYVJ P1012 火柴棒等式 Label:枚举

    背景 NOIP2008年提高组第二题 描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法 ...

  8. 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]

    有一个未完成的等式:1 2 3 4 5 6 7 8 9=N 当给出整数N的具体值后,请你在2,3,4,5,6,7,8,9这8个数字的每一个前面,或插入运算符号“+”,或插入一个运算符号“-”,或不插入 ...

  9. TensorFlow构建卷积神经网络/模型保存与加载/正则化

    TensorFlow 官方文档:https://www.tensorflow.org/api_guides/python/math_ops # Arithmetic Operators import ...

随机推荐

  1. 二叉堆 与 PriorityQueue

    堆在存储器中的表示是数组,堆只是一个概念上的表示.堆的同一节点的左右子节点都没有规律. 堆适合优先级队列(默认排列顺序是升序排列,快速插入与删除最大/最小值). 数组与堆 堆(完全二叉树)(构造大顶堆 ...

  2. Java类的成员之四:代码块.

    3.2类的成员之四:代码块 ①初始化块(代码块)作用:对Java对象进行初始化 ②程序的执行顺序: ③一个类中初始化块若有修饰符,则只能被static修饰,称为静态代码块(static block ) ...

  3. 笨办法学Python记录--习题38-40,复习前面,运用list操作函数

    #习题38 区分列表和字符串,用到了split(字符串专用函数),join.append.pop(这些是list操作函数) ten_things = "Apples Oranges Crow ...

  4. mongdb 备份还原导入导出

    -------------------MongoDB数据导入与导出------------------- 1.导出工具:mongoexport     1.概念:         mongoDB中的m ...

  5. Java-Class-C:com.github.pagehelper.PageInfo

    ylbtech-Java-Class-C:com.github.pagehelper.PageInfo 1.返回顶部   2.返回顶部 1.1. import com.github.pagehelpe ...

  6. yang文件语法格式

    前言 NETCONF(Network Configuration Protocol),该协议的配置功能非常强大,同时兼顾监控和故障管理,安全验证和访问控制,得到业界的一致认可,被广泛用来配置网络 NE ...

  7. MVC过滤器-->ActionFilterAttribute和HandleErrorAttribute

    自定义的action过滤器  需要继承自ActionFilterAttribute 接口 OnActionExecuting:  在方法执行之前执行 OnActionExecuted:  方法的逻辑代 ...

  8. vim + ctag + Taglist (转)

    一.ctag 当然,第一步就是要下载它!一条命令搞定: $sudo apt-get install ctags 如果不幸提示找不到软件包ctags,首先你也许应该update一下你的软件源,还不行的话 ...

  9. cm 安装cdh 后添加hive服务

    cm 安装cdh 后添加hive服务,出现错误提示 添加服务时候hive 配置如下: 错误信息提示: 错误日志: xec /opt/cloudera/parcels/CDH-5.4.7-1.cdh5. ...

  10. 使用ProxyBroker构建代理池

    import asyncio from proxybroker import Broker async def show(proxies): while True: proxy = await pro ...