很久没有写题解了~因为懒(年纪大了就是脸皮厚,还有脸说)

这道题今天花了很长时间去推,一开始以为是规律题,没推出来,直接模拟也TLE了,接着考虑实在是没思路,看了题解。

思路大概就是这样:

先上代码(别人大佬的)

#include<iostream>
using namespace std; int main()
{
int n;
int a[];
memset(a, , sizeof(a));
a[] = a[] = ;
int i, j;
for (i = ; i < ; i += ) //基数是共轭的
{ for (j = - i; j >= ; j--)
{
a[i + j] += a[j]; //基数加偶数还是基数,所以共轭,基数加基数是偶数,还是共轭的
}
}
while (cin >> n)
{
cout << a[n] << endl;
}
return ;
}

其实就是一道简单的递推题,关键是思路的问题

我们把一个自共轭Ferrers图的最外面的横行和竖行去掉,会发现剩下来的还是自共轭Ferrers图,接着再去掉,一直到只剩下一个,OK,一个当然只有一种放置方法。

然后我们再看到   另外一个 面积为3(只有一行竖和横)的自共轭Ferrers图,会发现它还可以放1个面积在第二行,于是面积就成为了4,依然还是自共轭Ferrers图。

再再再看到一个面积为5(只有一行竖和横)的自共轭Ferrers图,会发现它还可以放1个面积,可以放3个面积,可以放4个面积,于是面积就成为了6,8,9,面积为6,8,9的依然还是自共轭Ferrers图。

最后再看到一个面积为9(只有一行竖和横)的自共轭Ferrers图,会发现它还可以放1个,4个,5个等等。

这样子思路就出来了:

我们由大到小开始遍历看看能在自己里面放几个,放完组成的面积是多少,该对应面积的排列数加一

例如

首先 我们给a[0],a[1]赋值1,因为面积1和0就只有1种了,其他a[]都为0

然后我们从大到小开始遍历

第一次有效赋值是从a[3+1]+=a[1]开始的,这表示着  面积3添加1个面积,得到面积4,面积4就可以由3+1这种组合得到,于是加上面积1的组合数就等于面积4的总组合数

第二次有校赋值a[3+0]+=a[0],这表示着  面积3添加0个面积,得到面积3,面积3就可以由3+0这种组合得到,于是加上面积0的组合数就等于面积3的总组合数

再看看a[8]的组合方式   5+3,7+1,所以面积8的组合数就是面积3的组合数+面积1的组合数。

最后看看a[18]的组合方式,9+5+3+1,所以面积18的组合数为4.

下面再说说代码上的解释

第一个for循环之所以+=2,是因为是在横竖两边各加了一个单位

第二个for循环之所以是从大到小遍历,是因为我们更新的数据要从小开始,因为我们添加的单位不能超过边界,也就是以最外界横竖为长宽的边界。

例如a[3+100]+=a[100],这样其实是无效的,因为a[100]此时仍为0

而a[3+1]+=a[1],这样则是有校的,因为a[1]此时为1,也就代表着,面积3可以放得下面积1从而构成面积4.

还有一个好处就是 例如a[18]==4 如果是a[81+18]==a[99],这样意味着a[81]的面积添加a[18]的所有组合数了,因为a[18]不仅仅只有一种组合数.

hdu 1246的更多相关文章

  1. HDU 1312 (BFS搜索模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:问迷宫中有多少个点被访问. 解题思路: DFS肯定能水过去的.这里就拍了一下BFS. ...

  2. HDU 5643 King's Game 打表

    King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...

  3. hdu 1174:爆头(计算几何,三维叉积求点到线的距离)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  4. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  5. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. AC日记——丑数 codevs 1246

    1246 丑数 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 对于一给定的素 ...

  7. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  8. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  9. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

随机推荐

  1. android 开发学习2

    Dao dao = new Dao(yi_ji_lu_zhang_dan.this);List<GetOneRecord> list = dao.getAllRecord();//创建迭代 ...

  2. P 1021 个位数统计

    转跳点:

  3. 洛谷 P1435 回文字串

    题目传送门 解题思路: 就是求一个字符串的最长回文子序列的长度,然后用整个的长度减去最长回文子序列的长度 AC代码: #include<iostream> #include<cstd ...

  4. 洛谷 P2697 宝石串

    题目传送门 解题思路: 将红色的设置为-1,绿色的为1,统计前缀和sum,如果sum[i] == sum[j],则说明i~j是一个稳定的区间 因为答案要求最大,所以我们要记录每个sum值的最左端点(也 ...

  5. grep -q

    grep -q用于if逻辑判断      安静模式,不打印任何标准输出.如果有匹配的内容则立即返回状态值0. grep -q的用法 #  if  grep -q hello a.txt ; then ...

  6. storm on yarn(CDH5) 部署笔记

    按照storm on yarn(Apache hadoop)部署好之后,然后修改HADOOP_HOME,hadoopenv.sh中的JAVA_HOME,以及storm-yarn-master中pom. ...

  7. my97datepicker实现日期改变立刻触发函数

    <input type="text" class="Wdate" onclick="WdatePicker({onpicking:functio ...

  8. logrotate+crond日志切割、轮询

    logrotate 在工作中经常会有需求去查看日志,无论是通过应用或者系统error日志去查找问题或者通过nginx的访问日志统计站点日均PV.UV.所以体现了日志的重要性,但是通常当业务越来越大的时 ...

  9. linux文件编辑VI命令详解

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  10. 【转载】Emdedding向量技术在蘑菇街推荐场景的应用

    花名:越祈 部门:算法中心搜索策略组 入职时间:2017/06/01 主要从事蘑菇街推荐算法相关研发工作 蘑菇街是一家社会化导购电商平台,推荐一直是其非常重要的流量入口.在电商平台中,推荐的场景覆盖到 ...