51Nod 1509 加长棒(隔板法)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509

思路:
直接去解可行的方法有点麻烦,所以应该用总的方法去减去不可行的方法,有点像容斥原理。
将加长棒分成4个部分,允许为0,其中一部分表示剩余。这个就是经典的隔板法了。

这是百度百科上的一个例子,看完之后应该就理解隔板法的做法了吧。
这道题目也就是要将L分成4部分,允许为空,所以先L+4,表示每个部分至少为1,所以总共有L+4-1的空隙可以插板,我们需要插3个板,所以总的方法数为C(L+4-1,3)。
接下来求解不满足的个数:
构不成三角形的条件就是(假设c为最大边):a+x+b+y<=c+z
同时还满足:x+y+z<=L
所以x+y<=min(c+z-a-b,l-z)
接下来我们只需要枚举z,然后求出x+y的值,把它的长度加到两根棒上,可以为0也可以剩余,这不就又是前面的隔板法了吗。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
using namespace std; typedef long long LL; LL a,b,c,l; LL solve(LL a,LL b, LL c, LL l) //设c为最大边
{
LL cnt=;
for(int z=;z<=l;z++)
{
LL x=min(c+z-a-b,l-z);
if(x>=) cnt+=(x+)*(x+)/;
}
return cnt;
} int main()
{
//freopen("D:\\input.txt","r",stdin);
while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&l))
{
LL ans=(l+)*(l+)*(l+)/;
ans-=solve(a,b,c,l);
ans-=solve(a,c,b,l);
ans-=solve(b,c,a,l);
printf("%lld\n",ans);
}
}
51Nod 1509 加长棒(隔板法)的更多相关文章
- 51Nod 1509加长棒
传送门 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509 现在有三根木棒,他们的长度分别是a,b,c厘米.你可以对他 ...
- 51 Nod 1509 加长棒(巧妙的隔板法计数)
1509 加长棒 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 现在有三根木棒,他们的长度分别是a,b,c厘米 ...
- CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)
Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...
- vijos1060 隔板法
排列组合问题 之前没有学过隔板法,随便学习了一下 其实挺好理解的 附上题解: 先只考虑一种球:因为有n个盒子每个盒子可以放任意多球,还可以空出来任意多球.所以可以考虑为n+1个盒子,最后一个盒子里面是 ...
- BZOJ 3028: 食物 [生成函数 隔板法 | 广义二项式定理]
3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 497 Solved: 331[Submit][Status][Discuss] De ...
- How do you add? UVA - 10943(组合数的隔板法!!)
题意: 把K个不超过N的非负整数加起来,使它们的和为N,有多少种方法? 隔板法...不会的可以买一本高中数学知识清单...给高中班主任打个广告.... 隔板法分两种...一种是不存在空集 = C(n- ...
- uva10943(隔板法)
很裸的隔板法. 引用一下维基上对隔板法的解释: 现在有10个球,要放进3个盒子里 ●●●●●●●●●● 隔2个板子,把10个球被隔开成3个部份 ●|●|●●●●●●●●.●|●●|●●●●●●●.●| ...
- hdu6397 Character Encoding 隔板法+容斥原理+线性逆元方程
题目传送门 题意:给出n,m,k,用m个0到n-1的数字凑出k,问方案数,mod一个值. 题目思路: 首先如果去掉数字范围的限制,那么就是隔板法,先复习一下隔板法. ①k个相同的小球放入m个不同的盒子 ...
- HDU4045 Machine scheduling —— 隔板法 + 第二类斯特林数
题目链接:https://vjudge.net/problem/HDU-4045 Machine scheduling Time Limit: 5000/2000 MS (Java/Others) ...
随机推荐
- python的三个函数(eval、exec、complie)和python版RMI
一.python的三个函数: 1.eval函数: 之前已经讲过了这个函数,该函数也类似于php的eval,例如下边这个例子 eval("os.system('id')") 但是有个 ...
- PHP pdf转化为图片(PNG)
/** * 将pdf文件转化为多张png图片 * @param string $pdf pdf所在路径 (/www/pdf/abc.pdf pdf所在的绝对路径) * @param string $p ...
- 单源最短路(spfa),删边求和
http://acm.hdu.edu.cn/showproblem.php?pid=2433 Travel Time Limit: 10000/2000 MS (Java/Others) Mem ...
- ZOJ 3203 Light Bulb
Compared to wildleopard's wealthiness, his brother mildleopard is rather poor. His house is narrow a ...
- 终于修好了MacBook
之前由于Trackpad故障,陆家嘴苹果店开了维修单,让我在2周内去更换,详见第二次去苹果店维修MacBook. 后来由于购买了AppleCare进行延保,又担心放在那维修时间长,就懒得去更换了. 昨 ...
- Tickets---hdu1260 (简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 题意就是有n个人排队买票,每个人需要的时间是a[i] (1=< i <=N),但是现 ...
- 内核通信之Netlink源码分析-用户内核通信原理
2017-07-05 本节从一个小案例入手,结合源码分析下通过netlink进行内核和用户通信的流程. 内核端 按照传统CS模式,其实内核端可以作为是服务器端,用以接收用户的请求并作出处理,但是从ne ...
- 6.2 Controllers -- Representing Multipe Models
1. 一个controller的model可以代表几个记录也可以代表单个.这里,路由的model hook返回一个歌曲数组: app/routes/songs.js export default Em ...
- 线性表:实现单链表和子类栈(Stack)及单向队列(Queue) [C++]
刚刚开始学习c++.之前c的内容掌握的也不多,基本只是一本概论课的程度,以前使用c的struct写过的链表.用python写过简单的数据结构,就试着把两者用c++写出来,也是对c++的class,以及 ...
- cocos-lua基础学习(九)spite类学习笔记
创建精灵 ,) ) layer:addChild( sprite ) ) layer:addChild(BatchNode, , kTagSpriteBatchNode) ,) ) layer:add ...