题意:
有1~9数字各有a1, a2, …, a9个, 有无穷多的+和=.
问只用这些数字, 最多能组成多少个不同的等式x+y=z, 其中x,y,z∈[1,9].
等式中只要有一个数字不一样 就是不一样的

思路:
计算下可以发现, 等式最多只有36个.
然后每个数字i的上界是17-i个 可以预先判掉答案一定是36的, 然后直接暴力搜索每个等式要不要就好了.
注意剪枝即可

 const int maxn = ;
int a[maxn];
bool flag36;
int ans;
struct Equation
{
int x, y, z;
} type[];
void init()
{
flag36 = true;
ans = ;
for (int i = ; i < ; i++)
{
scanf("%d", a + i);
if (a[i] < - i)
{
flag36 = false;
}
}
} bool can(int t)
{
bool flag1 = false, flag2 = false, flag3 = false;
bool ret = true;
if (a[type[t].x] > )
{
a[type[t].x]--;
flag1 = true;
}
else ret = false; if (ret && a[type[t].y] > )
{
a[type[t].y]--;
flag2 = true;
}
else ret = false; if (ret && a[type[t].z] > )
{
a[type[t].z]--;
flag3 = true;
}
else ret = false; a[type[t].x] += flag1;
a[type[t].y] += flag2;
a[type[t].z] += flag3; return ret;
} void dfs(int t, int cnt) // 判断第t中,已经凑出了cnt个
{
if ( - t + cnt <= ans || t == ) return;
if (can(t))
{
a[type[t].x]--;
a[type[t].y]--;
a[type[t].z]--;
ans = max(ans, cnt + );
dfs(t + , cnt + );
a[type[t].x]++;
a[type[t].y]++;
a[type[t].z]++;
}
dfs(t + , cnt);
} void solve()
{
if (flag36)
{
printf("36\n");
return;
}
dfs(, );
printf("%d\n", ans);
} int main()
{
int idx = ;
for (int i = ; i < ; i++)
{
for (int j = ; i + j < ; j++)
{
type[idx++] = (Equation){i, j, i + j};
}
} int T, kase = ;
scanf("%d", &T);
while (T--)
{
printf("Case #%d: ", ++kase);
init();
solve();
}
return ;
}

HDU 5937 Equation的更多相关文章

  1. HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  2. HDU 5937 Equation(DFS+剪枝)

    题目链接 Equation 给定1-9这9个数字各自的卡片数,求能构成形如$i + j = k$的等式个数 等式中$i,j,k$必须都为个位数 若两个等式中$i,j,k$不完全相等,则这两个等式为不同 ...

  3. hdu 5937 -- Equation(搜索)

    题目链接 problem description Little Ruins is a studious boy, recently he learned addition operation! He ...

  4. HDU 6627 equation (分类讨论)

    2019 杭电多校 5 1004 题目链接:HDU 6627 比赛链接:2019 Multi-University Training Contest 5 Problem Description You ...

  5. hdu 5185 Equation(分析+DP)

    题意: Gorwin is very interested in equations. Nowadays she gets an equation like thisx1+x2+x3+⋯+xn=n, ...

  6. HDU 5185 Equation (DP)

    题目:LINK 题意:求满足题目要求的x序列的种类数. 能够发现符合条件的序列去重后是一个0, 1, ..., k的连续序列(k满足k*(k+1)/2 <= n) ,则这个去重后的序列长度最长为 ...

  7. HDU 2675 Equation Again

    公式转化+二分答案 首先,把题目中给的等式转化一下,变成了这个样子. 等式右边的值是可以求出来的. ln(x)/x的大致图像是这样的 那么只要对[0,e]和[e,+∞]分别进行二分答案即可. #inc ...

  8. hdu 4025 Equation of XOR 状态压缩

    思路: 设: 方程为 1*x1 ^ 1*x2 ^ 0*x3 = 0; 0*x1 ^ 1*x2 ^ 1*x3 = 0; 1*x1 ^ 0*x2 ^ 0*x3 = 0 把每一列压缩成一个64位整数,因为x ...

  9. hdu 2199 Can you solve this equation?(高精度二分)

    http://acm.hdu.edu.cn/howproblem.php?pid=2199 Can you solve this equation? Time Limit: 2000/1000 MS ...

随机推荐

  1. android:installLocation 解析

    决定了apk安装位置 有三个选项:1.auto 2.internalOnly 3.preferExternal http://www.cnblogs.com/Lefter/archive/2012/0 ...

  2. Linq Group By

    TableA { Id int, Name string, Group  int Score int } 从 Id Name Group Score 1 张三 A 70 2 李四 A 80 3 王五 ...

  3. LCD相关知识点

    1.LCD即液晶显示器,控制原理是控制其中的电子枪,在n行*n列的屏幕上投射不同颜色从而形成图像 2.编程步骤: ①打开LCD背光将LCD背光对应的GPIO设置为禁止上拉(GPxUP相应位写入1),选 ...

  4. 关于LDA的几何表示——MATLAB实现

    承接这个PCA的练习,还有一个关于LDA的几何表示. 题目如下: 代码实现LDA如下:LDA.m clear clc % 生成training sample MU1 = [6 10]'; MU2 = ...

  5. Razor视图添加命名空间

    在.cshtml文件添加@using MyNamespace,只是在页面添加引用这样编译不通过,还需要在view文件夹的web.config添加引用,找到<namespaces>添加< ...

  6. C#语法知识

    接口: 接口可以包含方法.属性.事件.索引器或这四种成员类型的任意组合. 接口不能包含常量.字段.运算符.实例构造函数.析构函数或类型.当类或结构实现接口时,类或结构必须为该接口定义的所有成员提供实现 ...

  7. 内存管理 - MEMORY POOL

    内存池优势: 效率高,频繁的new和delete效率低下 减少内存碎片,反复向系统申请和释放内存会产生大量内存碎片 防止内存泄露 内存池设计思路: 内存池可以根据实际需要,设计成不同的样子.下面是针对 ...

  8. jQuery 遍历 - each() 方法

    定义和用法 each() 方法规定为每个匹配元素规定运行的函数. 提示:返回 false 可用于及早停止循环. 语法 $(selector).each(function(index,element)) ...

  9. HttpContext详解

    HttpContext 类:封装有关个别 HTTP 请求的所有 HTTP 特定的信息. 在处理请求执行链的各个阶段中,会有一个对象在各个对象之间进行传递,也即会保存 请求的上下文信息,这个对象就是Ht ...

  10. Android 学习第16课,java 包、类等相关的一些基础知识

    1.建议将类放在包中,不要使用无名包 2.建议包名都用小写单词组成,不要用大写 3.建议包名用“域名的倒写.项目名.模块名”的形式,以确保包名的唯一性 注意:类变量与实例变量.类方法与实例方法的区别 ...