Lenny's Lucky Lotto Lists-DP

update@2011-08-03

for(i = 1;i <= 2000;i++){
    int j;
    dp[i][1] = i;
    for(j = 2;j <= 10 && ((1<<(j-1))) <= i;j++){
        int k;
        //dp[i][j] = dp[i>>1][j-1]
        dp[i][j] = 0;
        for(k = i;(k>>1) >= (1<<(j-2));k--){
            //dp[k>>1][j-1] + dp[(k-1)>>1][j-1]...... 这样相当于枚举了
            dp[i][j] += dp[k>>1][j-1];
        }
    }
    for(;j <= 10;j++)
        dp[i][j] = 0;
}




题目链接:Lenny's Lucky Lotto Lists
一道简单的DP题,先DP出所有的结果 然后直接输出。试了下10000的数据 要用3s,题目的数据只有2000 ,应该还有优化的空间