zoukankan      html  css  js  c++  java
  • POJ 2193 Lenny's Lucky Lotto Lists (DP)

    题目链接

    题意 : 给你两个数N和M,让你从1到M中找N个数组成一个序列,这个序列需要满足的条件是后一个数要大于前一个数的两倍,问这样的序列有多少,输出。

    思路 : dp[i][j]代表着长度为 i 的序列,最后一位是 j ,所以初始化的时候dp[1][ i ] = 1 ;dp[i][j] = sum(dp[i][k])(k < j/2) ;

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 
     5 using namespace std ;
     6 
     7 __int64 dp[11][2001];
     8 
     9 void chart()
    10 {
    11     memset(dp,0,sizeof(dp));
    12     for(int i = 1 ; i <= 2000 ; i++)
    13         dp[1][i] = 1 ;
    14     for(int i = 2 ; i <= 10 ; i++)
    15         for(int j = 1<<(i-1) ; j <= 2000 ; j++)
    16             for(int k = 1 ; k <= j/2 ; k++)
    17                 dp[i][j] += dp[i-1][k];
    18 }
    19 int main()
    20 {
    21     int t;
    22     scanf("%d",&t);
    23     int n,m ,cas = 1;
    24     chart();
    25     while(t--)
    26     {
    27         __int64 ans = 0 ;
    28         scanf("%d%d",&n,&m);
    29         for(int i = 1 ; i <= m ; i++)
    30             ans += dp[n][i];
    31         printf("Case %d: n = %d, m = %d, # lists = %I64d
    ",cas++,n,m,ans);
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    windows加固方案
    redis集群
    tar命令
    nfs安装配置
    nginx php版本隐藏
    细谈select函数(C语言)
    linux 下各errno的意义(转)
    iperf交叉编译:
    主机和虚拟机不能ping通问题
    Linux中tcpdump的编译和使用
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3659591.html
Copyright © 2011-2022 走看看