【原题】

1600: [Usaco2008 Oct]建造栅栏

Time Limit: 5 Sec  Memory Limit: 64 MB

Submit: 785  Solved: 443

[Submit][Status]

Description

勤奋的Farmer John想要建造一个四面的栅栏来关住牛们。他有一块长为n(4<=n<=2500)的木板,他想把这块本板切成4块。

这四块小木板可以是不论什么一个长度仅仅要Farmer John可以把它们围成一个合理的四边形。他可以切出多少种不同的合理方案。注意: *仅仅要大木板的分割点不同就当成是不同的方案(像全排列那样),不要操心另外的特殊情况,go
ahead。 *栅栏的面积要大于0. *输出保证答案在longint范围内。 *整块木板都要用完。

Input

*第一行:一个数n

Output

*第一行:合理的方案总数

Sample Input

6

Sample Output

6





输出具体解释:



Farmer John可以切出全部的情况为: (1, 1, 1,3); (1, 1, 2, 2); (1, 1, 3, 1); (1, 2, 1, 2); (1, 2, 2, 1); (1, 3,1, 1);

(2, 1, 1, 2); (2, 1, 2, 1); (2, 2, 1, 1); or (3, 1, 1, 1).

以下四种 -- (1, 1, 1, 3), (1, 1, 3, 1), (1, 3, 1, 1), and (3,1, 1, 1) – 不可以组成一个四边形.

HINT

Source

【分析】这道题的标算不太清楚。可能是DP吧。看到这类题目,就二话不说先打表。

我默认四边形的成立条件:三边之和大于第四边。

#include<cstdio>
using namespace std;
int n,i,j,k,p,ans;
int main()
{
for (n=1;n<=50;n++)
{
ans=0;
for (i=1;i<(n+1)/2;i++)
for (j=1;j<(n+1)/2;j++)
for (k=1;k<(n+1)/2;k++)
if (i+j+k<n)
{
p=n-i-j-k;
if (i+j+k<=p||i+j+p<=k||i+k+p<=j||j+k+p<=i) continue;
ans++;
}
printf("%d ",ans);
}
for (;;);
}

话说我的打表程序好丑啊。

然后这是1--20的情况:

0   0   0   1   4   6   16   19   40   44   80   85   140   146   224   231   336   344   480   489

看有什么规律。我先发现隔一位的规律:0和1差1,4和6差2,16和19差3。以此类推。

如今的关键就是求另外一组相邻的关系。作差后可得:3  10  21  36  55……发现规律了吗?这有两种形式来描写叙述:①3=1+2,10=1+2+3+4,21=1+2+3+4+5+6,……②3=1*3,10=2*5,21=3*7,36=4*9

自此。我们把规律整理一下即可了。

【AC代码】

#include<cstdio>
using namespace std;
int n,i,f[2505];
int main()
{
scanf("%d",&n);
if (n<4) {puts("0");return 0;}
f[4]=1;
for (i=5;i<=n;i++)
if (!(i&1)) f[i]=f[i-1]+i/2-1;
else f[i]=f[i-1]+(i-2)*(i/2-1);
printf("%d",f[n]);
return 0;
}

bzoj 1600 &amp; Usaco 月赛 2008 建造栅栏 题解的更多相关文章

  1. BZOJ 1600: [Usaco2008 Oct]建造栅栏( dp )

    QAQ我没读过书...四边形都不会判定了 简单的dp.... --------------------------------------------------------------------- ...

  2. BZOJ 1600: [Usaco2008 Oct]建造栅栏

    1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec  Memory Limit: 64 MB Description 勤奋的Farmer John想要建造一个四面的 ...

  3. BZOJ1600: [Usaco2008 Oct]建造栅栏

    1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 825  Solved: 473[Submit][Sta ...

  4. BZOJ 1600

    开始刷一些USACO月赛题了.. 这题简单递推就不说了. 然后我们发现暴力递推是$O(n^2)$的.看起来非常慢. 这道题拥有浓厚的数学色彩,因此我们可以从数学它的规律上找突破口. (于是暴力大法好, ...

  5. USACO 4.1.2 栅栏的木料

    这个讲的超好....一定要看...然后看我代码就好懂啦... http://blog.csdn.net/ta201314/article/details/41287567 各种优化确实非常好....搜 ...

  6. USACO月赛数据

    终于找到了usaco月赛的数据…… 根据月赛的名称,我们可以写出数据地址.比如08年一月的月赛即是:http://contest.usaco.org/JAN08  这里要注意区分大小写.

  7. 【BZOJ】1600: [Usaco2008 Oct]建造栅栏(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1600 说好的今天开始刷水.. 本题一开始我以为是排列组合,但是自己弱想不出来,只想到了如果四边有一条 ...

  8. BZOJ 1600 [Usaco2008 Oct]建造栅栏:dp【前缀和优化】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1600 题意: 给你一个长度为n的木板,让你把这个木板切割成四段(长度为整数),并且要求这四 ...

  9. BZOJ 1600 建造栅栏

    O(N)分成1,2与3,4两部分搞一搞. #include<iostream> #include<cstdio> #include<cstring> #includ ...

随机推荐

  1. Linux Unix shell 编程指南学习笔记(第三部分)

    第十三章  登陆环境 登陆系统时.输入username和password后.假设验证通过.则进入登录环境. 登录过程 文件/etc/passwd $HOME.profile 定制$HOME.profi ...

  2. DirectX11 学习笔记10 - 用文件存储顶点布局

    这节须要把顶点布局写在文件中面,为了方便.由于一大串很抽象的坐标放在CPP和程序混在一起很的不方便. 以下全为c++知识,读取文件中面的特定格式的数据: Vertex Count: 36 Data: ...

  3. js面向对象编程: js类定义函数时prototype和this差别?

    在面向对象编写js脚本时,定义实例方法主要有两种 例如以下: function ListCommon2(afirst) { var first=afirst; this.do1=function () ...

  4. Milk(杭电1070)

    Milk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  5. 赵雅智_android获取本机运营商,手机号部分能获取

    手机号码不是全部的都能获取.仅仅是有一部分能够拿到. 这个是因为移动运营商没有把手机号码的数据写入到sim卡中.SIM卡仅仅有唯一的编号.供网络与设备 识别那就是IMSI号码,手机的信号也能够说是通过 ...

  6. 宝马男砍人不慎刀落反被杀 防卫过当or故意伤害(在生命受到威胁的情况下,已经很难判断对方意图了,而且假如于莫是老弱妇幼,可能现在死的就是于莫了)

    如果被砍的是周律师他就不会说是防为过当吧,宝马车主跑回自己的车边时最危险,不知道他车上还有什么刀枪之类的.这如果判防卫过当,恶人会更恶,老实人连防卫都不敢了. 不知道在这个没有法治的国家会是如何判案的 ...

  7. Gradle之依赖管理

    Gradle之依赖管理 泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio 2 编辑推荐:稀土掘金,这是一个针对技术开发者的一 ...

  8. 0x08 总结与练习

    1:前面已经搞好了. 2:poj2965 这种开关问题一个点要么点一次要么不点,枚举所有点的方案实行即可 #include<cstdio> #include<iostream> ...

  9. nyoj--114--某种序列(滚动数组)

    某种序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 数列A满足An = An-1 + An-2 + An-3, n >= 3  编写程序,给定A0, A1 和 ...

  10. WEBSERVICE之JDK开发webservice

    转自:https://www.cnblogs.com/w-essay/p/7357262.html 一.开发工具与环境 1. jdk1.6版本以上(jdk1.6.0_21及以上版本) 2 .eclip ...