zzuli 1868: UP UP UP!(dp)

严格上升子序列个数;

#include <cstdio>
#include <cstring>
#define N 110
typedef long long LL;
LL a[N], dp[N][N];
const int MOD = 1000000000 + 7;
//dp[i][j] 以i结尾长度为j的严格递增子序列长度 ;
int main()
{
    int Q =1;
    int t; scanf("%d", &t);
    while(t--)
    {
        int n, m;
        scanf("%d%d", &n, &m);
        for(int i=1; i<= n; i++)
        {
            scanf("%lld", &a[i]);
        }
        memset(dp, 0, sizeof(dp));
        for(int i=1; i<=n; i++)   //感觉像是打表;
        {
            dp[i][1]= 1;
            for(int j=1; j<= i; j++)
            {
                for(int k=1; k< i; k++)
                {
                    if(a[k] <a[i])
                        dp[i][j]=(dp[i][j]+dp[k][j-1])%MOD;
                }
            }
        }
        LL ans=0;
        for(int i=1; i<= n; i++)
        {
            ans=(ans+ dp[i][m]) %MOD;
        }

        printf("Case #%d: %lld\n", Q++, ans);
    }
    return 0;
}
时间: 2024-10-08 22:18:27

zzuli 1868: UP UP UP!(dp)的相关文章

zzuli 1875多线DP

1875: 蛤玮的财宝 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 530  Solved: 116 SubmitStatusWeb Board Description 蛤玮和他的妹子出海游玩,不小心遭遇了海难,他们醒来之后发现自己到了一座金银岛.岛主非常好心的告诉他们在岛的另一边有船可以送他们回家. 这座岛可以看成n*m的矩阵,蛤玮他们在位置(1,1),而船在位置(n,m).蛤玮发现金银岛遍地都是金子,每个格子里有价值a[i,j]的金子,他和妹

zzuli 2172 队列优化dp

2172: GJJ的日常之购物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 9  Solved: 8 SubmitStatusWeb Board Description 一天,GJJ去购物,来到商场门口,GJJ计划要买n个商品,第i个商品的坐标为(xi,yi),重量是wi. GJJ比较任性,想按照商品编号从小到大的顺序将所有的商品的搬到车里(车在(0,0)的位置): GJJ可以几个商品一起搬,但在任何时候GJJ手中的商品重量不能超过最大载重C.

2017.8.12 dp课小结

这节课难度超级大啊,基本上都是省选+NOI的题. 例1: 1801: [Ahoi2009]chess 中国象棋 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1868  Solved: 1075 [Submit][Status][Discuss] Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. Input 一行包含两个整数N,M

zzuli-1788(dp)

http://acm.zzuli.edu.cn/problem.php?id=1788 很有意思的一道题,当时周赛没写出来..... 这是道背包题,思路想出来了就是裸的背包,想不出来那就是...不会做呗. 要求两份相差最小. 一开始想的用贪心做,错了. 那么说用背包咋做,先将所有的价值加起来sum,然后除以2得sum1,sum2=sum-sum1,那么现在abs(sum1-sum2)是不是就是最小了, 那后以sum1为背包的容量,物品的价值既是价值又是体积,然后直接用一维01背包就行了,就是将一

zzuli-1739: DP(区间dp)

http://acm.zzuli.edu.cn/problem.php?id=1739 自家学校OJ上的题. 一个区间dp和我上一篇博文写的区间dp基本上一样, 直接上状态转移方程dp[i][j]=min(dp[i][k]+dp[k][j]+a[i]*a[k]*a[j],dp[i][j]); 思路和上一篇基本一样,状态方程表达的意思也一样,具体参考上一篇.比较懒,不写了.... 1 #include<stdio.h> 2 #include<string.h> 3 const int

zzuli 1430 多少个0

https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1430 1430: 多少个0 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 322  Solved: 82 SubmitStatusWeb Board Description 一个n*n的方格,每个格子中间有一个数字是2或者5,现在从方格的左上角走到右下角,每次只能选择向下或者向右移动一格两种移动方式,让所有经过的格子中的数字相乘,求使最后的结果中末

pyoj61 双线DP

传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者

UP UP UP!(dp)

UP UP UP! Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 92  Solved: 27SubmitStatusWeb Board Description 题意很简单,给你长度为n的序列,找出有多少个不同的长度为m的严格上升子序列.(PS:相同子序列的定义为,每一个元素对应的下标都相同) Input 输入数据第一行是个正整数T,表示总共有T组测试数据(T <= 5); 每组数据第一行为n和m,以空格隔开(1 <= n <= 100,

HDU 5542 The Battle of Chibi dp+树状数组

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:给你n个数,求其中上升子序列长度为m的个数 可以考虑用dp[i][j]表示以a[i]结尾的长度为j的上升子序列有多少 裸的dp是o(n2m) 所以需要优化 我们可以发现dp的第3维是找比它小的数,那么就可以用树状数组来找 这样就可以降低复杂度 #include<iostream> #include<cstdio> #include<cstring> #include