放棋游戏(NOIP模拟赛)(DP)
没有原题。。。
囧。。
[问题描述]
游戏规则是这样,有n(1<=n<=100)行格子,第一行由n个格子,第二行有n-1个格子,第三行由n-2个格子,……以此类推,第n行有1个格子。要求再这些格子上摆放棋子。摆放的时候要注意,每一个格子只能放一个棋子。同一行的格子摆放必须遵守从左至右的顺序,在一行内从左至右摆放时不能跳过某个格子来摆放。每一行放的棋子数不能超过上一行的棋子数。
输入文件(diagrams.in):仅1行,一个正整数n。
输出文件(diagrams.out):仅1行,方案总数。
样例:输入2,输出4。
(样例补充说明:不能一个棋子都不放)
。。
这题DP好吧,裸的DP题。
不过要特判一下如果输入1要输出1.
设f[i][j]表示放到第[i]行,前j列都放了棋子的方案数
很明显就可以得出状态转移方程。。
f[i][j]=sum(f[i-1][k])(j<i,k<=j)
f[i][i]=f[i][i-1];
然后以为很简单,就交了。
发现数据范围一只。
n<=100,好小啊。。
但是。。
n到30就爆long long了。
怎么办。
写了个高精度。。
终于过了233~
高精度不能写炸诶~
下面贴代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char f[][][];
int n;
void add(char a[],char b[])
{
int l;
int l1=strlen(a);
int l2=strlen(b);
int num1[],num2[];
memset(num1,,sizeof(num1));
memset(num2,,sizeof(num2));
for(int i=;i<=l1-;i++)
num1[l1--i]=a[i]-'';
for(int i=;i<=l2-;i++)
num2[l2--i]=b[i]-'';
if(l1>l2)l=l1;
else l=l2;
for(int i=;i<=l-;i++)
{
num1[i]+=num2[i];
if(num1[i]>=)num1[i+]++,num1[i]-=;
}
if(num1[l]!=)l++;
for(int i=l-;i>=;i--)
a[l--i]=num1[i]+;
}
void work(int x){
if(x==){printf("1\n");return;}
else
{
f[][][]='';
f[][][]='';
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
{
for(int k=;k<=j&&(k<=(i-));k++)
{
if(strcmp(f[i][j],"")==)f[i][j][]='';
add(f[i][j],f[i-][k]);
}
}
for(int j=;j<strlen(f[i][i-]);j++)
f[i][i][j]=f[i][i-][j];
}
char ans[]="";
ans[]='';
for(int i=;i<=n;i++)
{
add(ans,f[n][i]);
}
printf("%s",ans);
}
}
int main(){
freopen("diagrams.in","r",stdin);
freopen("diagrams.out","w",stdout);
scanf("%d",&n);
work(n);
fclose(stdin);
fclose(stdout);
}
放棋游戏(NOIP模拟赛)(DP)的更多相关文章
- 【noip模拟赛5】细菌 状压dp
[noip模拟赛5]细菌 描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- NOIP模拟赛-2018.11.7
NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...
- 2016-06-19 NOIP模拟赛
2016-06-19 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c ...
- 2014-10-31 NOIP模拟赛
10.30 NOIp 模拟赛 时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
随机推荐
- 笔记-Python-language reference-5.the import system
笔记-Python-language reference-5.the import system 前言 经常用到import,module,对其中的机制及原理有一定的了解,但没有将各种信息前后连通起来 ...
- MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':ge
数据库表里命名有这个字段,可怎么就是报错呢,大神的解释: 加上之后立马好用!!!
- Mysql 表转换成 Sqlite表
目前的转换仅仅支持对没有外键的Mysql数据表 准备: 下载安装 Sqlite Expert 软件 一 获取Mysql中的.sql文件,获取过程省略可以直接导出sql文件 二 在Sqlite Expe ...
- laravel5.5事件广播系统实例laravel-echo + redis + socket.io
目录 1. 广播配置说明 1.1 广播驱动配置 1.2 注册服务提供器 2. 驱动器配置 2.1 安装predis 2.2. 配置服务端 2.2.1 安装方法 2.2.2 初始化服务端 2.2.3 运 ...
- shuffle的过程分析
shuffle的过程分析 shuffle阶段其实就是之前<MapReduce的原理及执行过程>中的步骤2.1.多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点 ...
- Java基础-6流程控制
一).选择控制: 选择控制分为两种:if...else...和switch 单分支结构:这是最简单的一种选择结构,它只是简单的判断某个条件是否成立,如果成立就执行一段代码,语句形式为: if(条件表达 ...
- 孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类尝试第一天
孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类,尝试第一天 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 按上一天的规划,这是根据过去我自学其它编程语 ...
- install ironic-inspector
安装相应的包和组件 yum install openstack-ironic-inspector python-ironic-inspector-client -y 创建user openstack ...
- SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXX' (13)
SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXX' (13) 我可以真见识了 SELinux 的利害了, 这个问题让我找了好长时 ...
- 电信学院第一届新生程序设计竞赛题解及std
首先非常感谢各位同学的参加,还有出题验题同学的辛勤付出 昨天想偷懒就是不想再把我C++11的style改没了,大家看不懂的可以百度一下哦,懒得再写gcc了,毕竟代码是通的 //代表的是行注释,所以那个 ...