ET


私信TA

用户名:wbc

访问量:62982

签 名:

人生苦短,我TM直接py

等  级
排  名 62
经  验 10762
参赛次数 3
文章发表 68
年  龄 0
在职情况 学生
学  校 东北大学
专  业 计算机科学与技术

  自我简介:

自2020起转python了。。。 C++兼容C,所以不要问为什么我所有的提交都是C++的.... 不AC,毋宁死,代码越短越好,思路越清奇越好hhhhhhhh

解题思路:
0
1 1
2 2    1+1
3 2+1  1+1+1
4 4    2+2     2+1+1   1+1+1+1
5 4+1  2+2+1   2+1+1+1 1+1+1+1+1
6 4+2  4+1+1   2+2+2   2+2+1+1     2+1+1+1+1   1+1+1+1+1+1



0 : 1  0  0  0  0  0  0  0  0  0
1 : 1  0  0  0  0  0  0  0  0  0
2 : 1  1  0  0  0  0  0  0  0  0
3 : 1  1  0  0  0  0  0  0  0  0
4 : 1  2  1  0  0  0  0  0  0  0
5 : 1  2  1  0  0  0  0  0  0  0
6 : 1  3  2  0  0  0  0  0  0  0
7 : 1  3  2  0  0  0  0  0  0  0


0 : 1  0  0  0  0  0  0  0  0  0
1 : 1  0  0  0  0  0  0  0  0  0
2 : 1  2  0  0  0  0  0  0  0  0
3 : 1  2  0  0  0  0  0  0  0  0
4 : 1  3  4  0  0  0  0  0  0  0
5 : 1  3  4  0  0  0  0  0  0  0
6 : 1  4  6  0  0  0  0  0  0  0
7 : 1  4  6  0  0  0  0  0  0  0



1  1
       1
2  1+1
       2
       1+1
4  1+2+1
       4
       2+2 2+1+1
       1+1+1+1
6  2+3+1=6
       4+2 4+1+1
       2+2+2 2+2+1+1 2+1+1+1+1
       1+1+1+1+1+1
8  1+4+4+1=10
       8
       4+4 4+2+2 4+2+1+1 4+1+1+1+1
       2+2+2+2 2+2+2+1+1 2+2+1+1+1+1 2+1+1+1+1+1+1
       1+1+1+1+1+1+1+1

参考代码:

#include <iostream>

using namespace std;

int map[1000001][21] = {0};//(1,000,000)10=(F4240)16

int main() {
    int T, N;
    int i, j, k, l;
    //预处理,打表
    map[0][0] = 1;
    for (i = 1; i < 1000001; ++i) {
        l = 1;
        for (j = 0; l <= i; ++j, l *= 2) {//拆分出l=2^j
            map[i][j] = map[i - l][j];
        }
        for (k = 1; k < 21; ++k) {
            map[i][k] += map[i][k - 1];
            map[i][k] %= 1000000000;
        }

    }

////显示数组
//    for (i = 0; i < 10; ++i) {
//        cout << i << " : ";
//        for (j = 0; j < 10; ++j) {
//            cout << map[i][j] << "\t";
//        }
//        cout << endl;
//    }
    cin >> T;
    while (T--) {
        cin >> N;
        cout << map[N][20] << endl;
    }
    return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »