放棋游戏(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系列3之内置函数和文件操作
目录 自定义函数 内置函数 文件的操作 练习题 一. 自定义函数 1. 函数的创建 函数的创建 1.def关键字 2.函数名+() 3.冒号 4.缩进 5. return返回值,可以不写,默认的返回值 ...
- python——matplotlib图像的基本处理
1.绘制图像中的点和线 from PIL import Image from pylab import * im = array(Image.open('E:\Python\meinv.jpg')) ...
- 笔记-Python-language reference-5.the import system
笔记-Python-language reference-5.the import system 前言 经常用到import,module,对其中的机制及原理有一定的了解,但没有将各种信息前后连通起来 ...
- python面向对象三大特性
面向对象的三大特性: 封装.继承和多态 一.封装 封装,顾名思义就是将内容封装到某个地方,以后可以直接调用被封装到某处的内容. - 将内容封装到某处 - 从某处调用被封装的内容 第一步,将内容封装到某 ...
- [原]sencha touch之表单二(注册页面)
接着上一篇的登陆页面,来一个最简单的注册页面,几乎包含了常用的field Ext.application({ id:'itKingApp', launch:function(){ var formPa ...
- [bzoj3371][poj2009][Usaco2004 Mar]Moo University - Emergency Pizza Order 定制比萨饼
标题这么长的..真是让感觉人头大脚轻. 贴题面先. Description Moo大学的餐厅必须为$C(1\leq C\leq 1000)$头入学的奶牛新生定制比萨饼.比萨饼可以在比萨小屋订做 ...
- 洛谷P1451 求细胞数量
求细胞数量 题目链接 这道题大概是一个最简单的联通块的题了qwq 注意枚举起点的时候 一定不要从0开始不然你就会从0进入到了其他联通块中从而多查. 一定看清题意这道题不是同色为联通块!!! AC代码如 ...
- ubuntu上通用解压方式
ubuntu上通用解压方式 tar xvf *.bin.tar.gz,gz,tar.tgz
- ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些
1.对应基本数据类型默认关键字是 atomic,readwrite,assign 2.对于普通的 Objective-C 对象 atomic,readwrite,strong
- 《数据结构与算法分析:C语言描述》复习——第五章“堆”——二叉堆
2014.06.15 22:14 简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用.二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序.我们关心的通常 ...