hdu 1246
很久没有写题解了~因为懒(年纪大了就是脸皮厚,还有脸说)
这道题今天花了很长时间去推,一开始以为是规律题,没推出来,直接模拟也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的更多相关文章
- HDU 1312 (BFS搜索模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:问迷宫中有多少个点被访问. 解题思路: DFS肯定能水过去的.这里就拍了一下BFS. ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
- hdu 1174:爆头(计算几何,三维叉积求点到线的距离)
爆头 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- 转载:hdu 题目分类 (侵删)
转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- AC日记——丑数 codevs 1246
1246 丑数 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 对于一给定的素 ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- oracle批量修改字段长度
alter table 表名 modify (字段名1 字段类型1(长度1),字段名2 字段类型2(长度2)) alter table 表名 modify column_name varchar2(3 ...
- InstrumentationTextCase 测试
<instrumentation android:name="android.test.InstrumentationTestRunner" an ...
- Android Studio Madual作为application的使用以及工作空间和modual的区别
Android Studio Madual作为application的使用以及工作空间和modual的区别 前言: 写这篇文章的目的是因为自己使用Android Studio开发时进入了一个误区,后面 ...
- Cookie简单介绍
Cookie 饼干. 其实是一份小数据, 是服务器给客户端,并且存储在客户端上的一份小数据 应用场景 自动登录.浏览记录.购物车. 为什么要有这个Cookie http的请求是无状态. 客户端与服务器 ...
- ssh and scp从远程服务器下载文件
scp -r root@172.16.252.32:/home/files /home/files 下载目录 -r root是用户172.16.252.32是ip:/home/files 是你要 ...
- 澳洲Essay写作常见误区汇总
近年来,想要不断提升自己开拓视野选择留学的学生越来越多,留学生们对于澳洲essay的写作并不生疏,可是许多人并不能很好地完成澳洲essay的写作,因为留学生们对于澳洲essay写作并不怎么了解.其实, ...
- APP分享视频H5页面
男左女右中国APP需要做一个APP分享视频H5页面,效果图见下面的图. 出现的问题: (1)URL参数为中文的时候乱码: (2)vedio点击默认是QQ,微信的播放器: (3)给视频添加一个默认的封面 ...
- mysql字符类型总结及常用字符函数
常用字符串函数: concat(s1,s2,s3..) 连接s1,s2,...sn为一个字符串 INSERT(str,x,y,instr)将字符串str从x位置开始,y个字符串替换为字符串 ...
- Freemarker的一点延生
1.freemarker一般不是单独使用,他可以和activeMQ互相结合,来完成功能的. 使用它有 几点好处, 首先就是提高程序效率,一般情况我们的页面都是jsp,而jsp实际上是servlet,在 ...
- SoapUI substring