bzoj 1600 & Usaco 月赛 2008 建造栅栏 题解
【原题】
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
Sample Output
输出具体解释:
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 & Usaco 月赛 2008 建造栅栏 题解的更多相关文章
- BZOJ 1600: [Usaco2008 Oct]建造栅栏( dp )
QAQ我没读过书...四边形都不会判定了 简单的dp.... --------------------------------------------------------------------- ...
- BZOJ 1600: [Usaco2008 Oct]建造栅栏
1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec Memory Limit: 64 MB Description 勤奋的Farmer John想要建造一个四面的 ...
- BZOJ1600: [Usaco2008 Oct]建造栅栏
1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 825 Solved: 473[Submit][Sta ...
- BZOJ 1600
开始刷一些USACO月赛题了.. 这题简单递推就不说了. 然后我们发现暴力递推是$O(n^2)$的.看起来非常慢. 这道题拥有浓厚的数学色彩,因此我们可以从数学它的规律上找突破口. (于是暴力大法好, ...
- USACO 4.1.2 栅栏的木料
这个讲的超好....一定要看...然后看我代码就好懂啦... http://blog.csdn.net/ta201314/article/details/41287567 各种优化确实非常好....搜 ...
- USACO月赛数据
终于找到了usaco月赛的数据…… 根据月赛的名称,我们可以写出数据地址.比如08年一月的月赛即是:http://contest.usaco.org/JAN08 这里要注意区分大小写.
- 【BZOJ】1600: [Usaco2008 Oct]建造栅栏(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1600 说好的今天开始刷水.. 本题一开始我以为是排列组合,但是自己弱想不出来,只想到了如果四边有一条 ...
- BZOJ 1600 [Usaco2008 Oct]建造栅栏:dp【前缀和优化】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1600 题意: 给你一个长度为n的木板,让你把这个木板切割成四段(长度为整数),并且要求这四 ...
- BZOJ 1600 建造栅栏
O(N)分成1,2与3,4两部分搞一搞. #include<iostream> #include<cstdio> #include<cstring> #includ ...
随机推荐
- muduo库源码剖析(二) 服务端
一. TcpServer类: 管理所有的TCP客户连接,TcpServer供用户直接使用,生命期由用户直接控制.用户只需设置好相应的回调函数(如消息处理messageCallback)然后TcpSer ...
- poi读取合并单元格
poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...
- SharePoint 2013 开启訪问请求
1.通常,我们进入SharePoint 2013网站,假设没权限会提示该网站未被共享,而没有切换账号或者申请訪问,实在是非常流氓:事实上,SharePoint为我们提供了訪问请求页面.可是可能须要手动 ...
- Pixhawk---基于NSH的Firmware开发与调试
1 相关知识了解 1.1 Nuttx系统 嵌入式实时操作系统(RTOS). 强调标准兼容和小型封装,具有从8位到32位微控制器环境的高度可扩展性.NuttX 主要遵循 Posix 和 ANSI 标 ...
- Regexp-Utils:身份证号校验
ylbtech-Regexp-Utils:身份证号校验 1.返回顶部 1.方法 var idCardNoUtil = { /*省,直辖市代码表*/ provinceAndCitys: { 11: &q ...
- 25.QT进度条
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> 5 #include <QProgressBar&g ...
- 循环引用的weak和assgin
__weak 当对象销毁后weakSelf指向的地址为nil __unsafe_unretained 挡圈对象销毁后,weakSelf执行的地址为不变,而地址对应对象已经销毁,再次访问该对象就崩溃,相 ...
- go并发设计模式 --资源生成器模式
1.简单的生成器 package main import ( "fmt" "math/rand" ) func GenerateIntA()chan int { ...
- Oracle中的数据字典技术及常用数据字典总结
一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等.当用户在对数据库中的数据进行 ...
- Python 之 PyCharm使用
PyCharm 的官方网站地址是:https://www.jetbrains.com/pycharm/download/ 教育版:https://www.jetbrains.com/pycharm- ...