题意:
有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. hibernate3 所需的jar包

  2. Nutch2.x

    http://www.micmiu.com/opensource/nutch/nutch2x-tutorial/

  3. JS 4 新特性:混合属性(mixins)

    Ext JS4的新特征1:混合属性(mixins) 组合是Extjs4的新特性,可用于实现多继承的情况.该属性会以同步方式加载类文件,并实例化该类(译者推理其内部使用Ext.create方法).直接上 ...

  4. 关于HttpURLConnection.setFollowRedirects

    public static void HttpURLConnection.setFollowRedirects(boolean followRedirects)public void HttpURLC ...

  5. 程序测试用的IE浏览器第二次无法加载入口程序的问题及其解决方法

    注:针对的是C#程序(Silverlight) 第一步.找到入口程序所在的路径,以记事本形式打开<入口程序.csproj>,由于之前配置入口程序时,设置了“Use Local IIS We ...

  6. 北大poj-1005

    I Think I Need a Houseboat Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 99271   Acce ...

  7. js中快速获取数组中的最大值最小值

    var a=[1,2,3,5]; alert(Math.max.apply(null, a));//最大值 alert(Math.min.apply(null, a)); //最小值 多维数组如下 v ...

  8. Java并发编程学习笔记(三)——对象的组合

    重要概念: 1.在设计线程安全类的过程中,需要包含以下三个基本要素: (1)找出构成对象状态的所有变量. (2)找出约束状态变量的不变性条件. (3)建立对象状态的并发访问管理策略. 2.

  9. (l老陈-小石头)典型用户、用户故事、用例图

    一.典型用户 老陈 小石头 二.用户故事 老陈:作为一个家长,我希望能利用软件在电脑上储存一些数学题目,以便在繁忙的工作中也能帮助到孩子提高数学. 小石头:作为一个小学二年级的小学生,我希望能利用软件 ...

  10. 第6章 第一个Linux驱动程序:统计单词个数

    编写一个Linux的一般步骤: 第1步:建立Linux驱动骨架(装载和卸载Linux驱动) 第2步:注册和注销设备文件 第3步:指定和驱动相关的信息 第4步:指定回调函数 第5步:编写业务逻辑 第6步 ...