bzoj 1600: [Usaco2008 Oct]建造栅栏 枚举
2016-11-15 11:06
351 查看
题意
给出一块长度为n的木板,问有多少种不同的方案使得切割成四块后可以围成一个四边形。n<=2500
分析
首先要知道若四条边可以围成一个四边形则必须满足任意三边之和大于第四边。那么我们就枚举前两边的长度x和y,设三、四条边长度分别为z,n-x-y-z,通过上述条件可以推出
z < n/2
z < n-x-y
z > n/2-x-y
那么就可以O(1)算出满足条件的z的取值范围了。
这题貌似还有神奇的排列组合法和动态规划法。
代码
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int main() { int n; scanf("%d",&n); int n1; if (n%2==1) n1=n/2+1; else n1=n/2; int ans=0; for (int i=1;i<n1;i++) for (int j=1;j<n1;j++) { int l=max(n/2-i-j+1,1),r=min(n1,n-i-j)-1; ans+=max(0,r-l+1); //printf("%d %d %d %d\n",i,j,l,r); } printf("%d",ans); return 0; }
相关文章推荐
- bzoj1600 [Usaco2008 Oct]建造栅栏
- BZOJ 1600 [Usaco2008 Oct]建造栅栏 DP
- BZOJ1600: [Usaco2008 Oct]建造栅栏
- 【BZOJ】1600: [Usaco2008 Oct]建造栅栏(dp)
- BZOJ 1600: [Usaco2008 Oct]建造栅栏
- 【bzoj 1600】: [Usaco2008 Oct]建造栅栏
- [BZOJ1600][Usaco2008 Oct]建造栅栏
- 【bzoj1600】【USACO2008 Oct】Building A Fence 建造栅栏
- bzoj 1600: [Usaco2008 Oct]建造栅栏(DP)
- 【bzoj 1600】【Usaco2008 Oct】建造栅栏 (递推) 题解&代码
- DP-BZOJ-1600- [Usaco2008 Oct]建造栅栏
- BZOJ_1600_[Usaco2008_Oct]_建造栅栏_(动态规划)
- BZOJ 1600 Usaco2008 Oct 建造栅栏
- BZOJ 1600: [Usaco2008 Oct]建造栅栏( dp )
- bzoj 1600: [Usaco2008 Oct]建造栅栏【dp】
- BZOJ 1600: [Usaco2008 Oct]建造栅栏|动态规划
- bzoj1600 [Usaco2008 Oct]建造栅栏
- [Usaco2008 Oct][BZOJ1600] 建造栅栏
- bzoj 1600 & Usaco 月赛 2008 建造栅栏 题解
- 1600: [Usaco2008 Oct]建造栅栏