3 条题解

  • 0
    @ 2024-9-22 21:35:21

    上一个代码 a数组大小开成 33 就 AC 了.

    • 0
      @ 2024-9-22 21:31:04

      代码(暂时有问题):

      #include <bits/stdc++.h>
      using namespace std;
      
      int a[11], cnt[33], m;
      bool vis[33][33][2];
      int f[33][33][2];
      
      // 到第p位,还需要有 x 位为 1,且 limit 
      int dfs(int p, int x, bool limit) {
      	if (x == 0)
      		return 1;
      	if (p == -1)
      		return 0;
      	if (vis[p][x][limit])
      		return f[p][x][limit];
      	vis[p][x][limit] = true;
      	int up = limit ? a[p] : 1;
      	for (int i = 0; i <= up; i++)
      		f[p][x][limit] += dfs(p-1, x-i, limit && i == up);	
      	return f[p][x][limit];
      }
      
      int cal(int num, int x) {
      	memset(vis, 0, sizeof vis);
      	memset(f, 0, sizeof f);
      	int p = 0;
      	for (; num; a[p++] = num % 2, num /= 2);
      	return dfs(p-1, x, true);
      }
      
      int main() {
      	int n;
      	cin >> n;
      	for (int i = 1; i <= 30; i++) {
      		cnt[i] = cal(n, i);
      		if (cnt[i]) m = i;
      	}
      	for (int i = 1; i <= m; i++)
      		cout << cnt[i] << endl;
      	return 0;
      }
      
      • 0
        @ 2024-9-22 21:21:32

        暴力 TLE:

        #include <bits/stdc++.h>
        using namespace std;
        
        int a[11], cnt[33], m;
        
        void dfs(int p, int x, bool limit) {
        	if (p == -1) {
        		cnt[x]++;
        		m = max(m, x);
        		return;
        	}
        	int up = limit ? a[p] : 1;
        	for (int i = 0; i <= up; i++) {
        		dfs(p-1, x+i, limit && i == up);	
        	}
        }
        
        void cal(int num) {
        	int p = 0;
        	for (; num; a[p++] = num % 2, num /= 2);
        	dfs(p-1, 0, true);
        }
        
        int main() {
        	int n;
        	cin >> n;
        	cal(n);
        	for (int i = 1; i <= m; i++)
        		cout << cnt[i] << endl;
        	return 0;
        }
        
        • 1

        信息

        ID
        40
        时间
        1000ms
        内存
        256MiB
        难度
        10
        标签
        (无)
        递交数
        9
        已通过
        3
        上传者