• BZOJ-2431: [HAOI2009]逆序对数列 (傻逼递推)


    2431: [HAOI2009]逆序对数列

    Time Limit: 5 Sec  Memory Limit: 128 MB
    Submit: 2401  Solved: 1389
    [Submit][Status][Discuss]

    Description

    对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数。若对于任意一个由1~n自然数组成的
    数列,可以很容易求出有多少个逆序对数。那么逆序对数为k的这样自然数数列到底有多少个?

    Input

    第一行为两个整数n,k。

    Output

    写入一个整数,表示符合条件的数列个数,由于这个数可能很大,你只需输出该数对10000求余数后的结果。

    Sample Input

    4 1

    Sample Output

    3

    样例说明:
    下列3个数列逆序对数都为1;分别是1 2 4 3 ;1 3 2 4 ;2 1 3 4;
    100%的数据 n<=1000,k<=1000

    HINT

     

    Source

    f[i][j]=Σf[i-1][j-k] k∈[0,i) 求和用和数组存一下,f[i][j]只与前一行有关系,所以开滚动数组
     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 typedef long long LL;
     4 const int MAX=1005,MOD=1e4;
     5 int n,m,f[MAX],s[MAX];
     6 int main(){
     7     freopen ("num.in","r",stdin);freopen ("num.out","w",stdout);
     8     int i,j;
     9     scanf("%d%d",&n,&m);
    10     for (i=0;i<=m;i++) s[i]=1;
    11     for (i=2;i<=n;i++){
    12         f[0]=1;
    13         for (j=1;j<=m;j++)
    14             if (j>=i) f[j]=(s[j]-s[j-i]+MOD)%MOD;
    15             else f[j]=s[j]%MOD;
    16         for (j=1;j<=m;j++)
    17             s[j]=(s[j-1]+f[j])%MOD;
    18     }
    19     printf("%d",f[m]);
    20     return 0;
    21 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    demo_10_02 云数据库聚合_bucket_02 bucketAuto
    demo_10_02 云数据库聚合_bucket_01
    nginx 启动脚本
    grep 全局搜索打印命令
    ulimit shell启动进程所占用的资源命令
    nginx 一键安装
    安装 nginx
    学习笔记::杜教筛
    markdown测试
    bzoj4589
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7764512.html
Copyright © 2020-2023  润新知