zoj 2402 - Lenny's Lucky Lotto Lists

题目:一个序列,每个元素都至少的前面的二倍,最大值为n,问长度为l的这种船有多少个。

分析:dp,LIS类似物。

状态:f(i,j)结束数字为j且长度为i的序列的个数,有转移方程:

F[ i ][ j ] = Sum(F[ i-1 ][ k ]) { 2^(i-2)<= k <= j/2);

再用S[ i ][ j ]求出长度为i结束不超过j的串的个数就可以了。

说明:(2011-09-19 01:33).

#include <iostream>
#include <cstdlib>
#include <cstring>

using namespace std;

long long F[ 11 ][ 2001 ];
long long S[ 11 ][ 2001 ];

int main()
{
    //打表
    memset( F, 0L, sizeof( F ) );
    memset( S, 0L, sizeof( S ) );

    F[ 0 ][ 0 ] = 1L;
    for ( int i = 1 ; i <= 10 ; ++ i )
    for ( int j = (1<<(i-1)) ; j <= 2000 ; ++ j ) {
        for ( int k = (1<<(i-1))/2 ; k <= (j>>1) ; ++ k )
            F[ i ][ j ] += F[ i-1 ][ k ];
        S[ i ][ j ] = S[ i ][ j-1 ] + F[ i ][ j ];
    }
    //
    int t,n,m;
    while ( cin >> t )
    for ( int c = 1 ; c <= t ; ++ c ) {
        cin >> n >> m;
        cout << "Case " << c << ": n = " << n << ", m = " << m << ", # lists = " << S[ n ][ m ] << endl;
    }
    return 0;
}

zoj 2402 - Lenny's Lucky Lotto Lists

时间: 2024-10-08 16:42:58

zoj 2402 - Lenny's Lucky Lotto Lists的相关文章

poj 2193 Lenny&#39;s Lucky Lotto Lists 简单dp

//poj 2193 //sep9 #include <iostream> using namespace std; typedef __int64 INT; INT dp[16][2048]; int n,m; int main() { int cases,t=0; scanf("%d",&cases); while(cases--){ scanf("%d%d",&n,&m); memset(dp,0,sizeof(dp));

Sicily 1146:Lenny&#39;s Lucky Lotto(dp)

题意:给出N,M,问有多少个长度为N的整数序列,满足所有数都在[1,M]内,并且每一个数至少是前一个数的两倍.例如给出N=4, M=10, 则有4个长度为4的整数序列满足条件: [1, 2, 4, 8], [1, 2, 4, 9], [1, 2, 4, 10], [1, 2, 5, 10] 分析:可用动态规划解题,假设dp[i][j],代表满足以整数i为尾数,长度为j的序列的个数(其中每一个数至少是前一个数的两倍).那么对于整数i,dp[i][j] 等于所有dp[k][j-1]的和,其中k满足:

Sicily 1011. Lenny&#39;s Lucky Lotto

1011. Lenny's Lucky Lotto   Time Limit: 1sec    Memory Limit:32MB Description Lenny likes to play the game of lotto. In the lotto game, he picks a list of N unique numbers in the range from 1 to M. If his list matches the list of numbers that are dra

ZOJ - 2402 DP方案数

题意:给出m,序列第i位是第i-1位的至少2倍大,的求长度为n且每一位范围均在1-m的序列方案数 对求方案数做不到信手拈来的感觉,需要加强 用简单的预处理和最优子结构能优化到很不错的效率了 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<stri

poj 动态规划题目列表及总结

此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276,1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740(博弈),1742, 1887, 1926(马尔科夫矩阵,求平衡), 1936, 1952, 1953, 1958, 1959, 1962, 1975,

DP题目列表/弟屁专题

声明: 1.这份列表不是我原创的,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 195

[转] POJ DP问题

列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 1952, 1953, 1958, 1959, 1962, 1975, 1989, 2018, 2029, 2039, 2063, 20

HOJ 题目分类

转自:http://blog.sina.com.cn/s/blog_65f3869301011a1o.html ******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈.队列),杂题等 ****************************************************************************

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T