JDFZ 1112 高三楼 数的划分

题意:链接

方法:数的划分

解析:

我终于A了这道题了!!

百年老坑!!!!!!

首先我承认这个玩意暴力我都不会写。

或者暴力复杂度爆炸。

看上面这个图,这是个7*7的矩阵

显然他可以由2,2,3来表示(RT);

但是这里它划分出来的三个矩阵的表示方法必须是独有的。

什么是独有的呢?以边长为4的矩阵演示一下。

显然有两种填充方案。如下图。

但是第一种填充方案显然是由两个边长为2的矩阵构成的,不是他独有的方案。

第二种填充方案便是它独有的填充方案,因为在这种填充方案中。找不到一个大小为i(i

因为如果可以找到一个大小为i(i

现在我们的目的就是求大小为n的矩阵的独有方案的个数。

经过漫长的画图过程=-=

发现只有如下的方案为独有的方案,并且长度为n的矩阵(n>=2)只有一个独有方案。

至于证明….

(大胆猜想!小心假设!从不证明!

于是这题就变水了,既然任意长度n的矩阵(n>=2)都只有一个独有方案。

所以这道题就变成了求将n划分成一堆大于等于2的数的方案数+1(这个1是它的独有方案)。

直接O(n^2)预处理划分方案数即可。


另外,惯性坑!

取余数是1e8+7不是1e9+7!!!!!!!!


代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 2010
#define MOD 100000007
using namespace std;
typedef long long ll;
int t,n;
int f[2010][2010];
void init()
{
    f[0][0]=1;
    for(int i=1;i<=2000;i++)
    {
        for(int j=1;j<=i;j++)
        {
            if(f[i-j][j])f[i][j]=(f[i-1][j-1]+f[i-j][j])%MOD;
            else f[i][j]=f[i-1][j-1];
        }
    }
}
int main()
{
    init();
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        if(n==1){puts("0");continue;}
        if(n==2){puts("1");continue;}
        if(n==3){puts("1");continue;}
        int ans=0;
        for(int i=2;i<=n/2;i++)
        {
            ans=(ans+f[n-i][i])%MOD;
        }
        printf("%d\n",ans+1);
    }
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-31 09:45:04

JDFZ 1112 高三楼 数的划分的相关文章

XJOI 高三楼

参观完各种饭堂,学校还有什么著名的景点呢?当然是教室了,此时此刻我 们来到了高三楼.你会发现高三楼门口会有以身份认证系统,这东西还有着一段疼人的历史.每年的九月到来,高三的童鞋大多不习惯学校的作息时间,有人迟到的情况在所难免,2013 届的moreD 同志作为当年的纪检部部长,创造了一种十分厉害的身份认证系统.他会给每位童鞋的饭卡加上一个电子认证信息:一个n*n的矩阵,其中,每行每列都有两个特殊的点.moreD 同志设计的身份认证系统会把这些矩阵读进来,并且对此进行解析,由于每个同学都带有独特的

NOIP2001 数的划分

题二 数的划分(20分) 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入:n,k (6<n<=200,2<=k<=6) 输出:一个整数,即不同的分法. 样例 输入: 7 3 输出:4 {四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;} [思路] 递推. 递推式d[i][j]=d[i-1][j-1]+d[i-j][j]

C语言 &#183; 数的划分

算法提高 数的划分 时间限制:1.0s   内存限制:256.0MB 问题描述 一个正整数可以划分为多个正整数的和,比如n=3时: 3:1+2:1+1+1: 共有三种划分方法. 给出一个正整数,问有多少种划分方法. 输入格式 一个正整数n 输出格式 一个正整数,表示划分方案数 样例输入 3 样例输出 3 数据规模和约定 n<=100 作者注释:递归问题.(本题运行超时) step表示当前剩余的数需要分成的份数;把n分成k份,只需第一个数等于i,计算从i等于1一直到i等于n/k,然后把剩余的n-i

codevs 1039 数的划分 x

1039 数的划分 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序).例如:n=7,k=3,下面三种划分方案被认为是相同的.1 1 5 1 5 1 5 1 1问有多少种不同的分法. 输入描述 Input Description 输入:n,k (6<n<=200,2<=k<=6) 输出描述 Output Desc

数的划分(动规)

数的划分 总时间限制:  1000ms 内存限制:  65536kB 描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5: 1,5,1: 5,1,1: 问有多少种不同的分法. 输出:一个整数,即不同的分法. 输入 两个整数n,k (6 < n <= 200,2 <= k <= 6),中间用单个空格隔开. 输出 一个整数,即不同的分法. 样例输入 7 3 样例输出 4 提示 四种分法为:1,1,5:

luoguP1025+codevs 1039 数的划分 x

luoguP1025 + codevs1039 数的划分 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序).例如:n=7,k=3,下面三种划分方案被认为是相同的.1 1 5 1 5 1 5 1 1问有多少种不同的分法. 输入描述 Input Description 输入:n,k (6<n<=200,2<=k<=

8787:数的划分(又是一个放苹果)

8787:数的划分 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5: 1,5,1: 5,1,1: 问有多少种不同的分法. 输出:一个整数,即不同的分法. 输入 两个整数n,k (6 < n <= 200,2 <= k <= 6),中间用单个空格隔开. 输出 一个整数,即不同的分法. 样例输入 7 3 样例输出 4

codevs——1039 数的划分

1039 数的划分 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序).例如:n=7,k=3,下面三种划分方案被认为是相同的.1 1 5 1 5 1 5 1 1问有多少种不同的分法. 输入描述 Input Description 输入:n,k (6<n<=200,2<=k<=6) 输出描述 Output D

洛谷 P1025 数的划分

P1025 数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n<=200,2<=k<=6) 输出格式: 一个整数,即不同的分法. 输入输出样例 输入样例#1: 复制 7 3 输出样例#1: 复制 4 说明 四种分法为:1,1,5;1,2,4;1,3,3;2,2,3; 思路:数据范围很小