小米

  • 单选 10,多选 10,编程 2

Reference

Index

1. 小米大礼包

思路

  • DFS

C++(67%,TLE)

#include <stdio.h>
int n;
int p[210];
int m;

bool dfs(int i, int sum) {
    if (i == n) return sum == m;
    if (dfs(i + 1, sum + p[i])) return true;
    if (dfs(i + 1, sum)) return true;
    return false;
}

int main() {

    scanf("%d", &n);
    for (int i = 0; i < n; ++i)
        scanf("%d", &p[i]);
    scanf("%d", &m);

    if (dfs(0, 0)) 
        printf("1");
    else 
        printf("0");

    return 0;
}

加入剪枝(未测试)

【小米2018-09-20在线笔试】小米大礼包 - CSDN博客

```C++

include

int n; int p[210]; int m;

bool dfs(int i, int sum) { if (sum > m) return false; // 剪枝 if (i == n) return sum == m; if (dfs(i + 1, sum + p[i])) return true; if (dfs(i + 1, sum)) return true; return false; }

int main() {

}

Python(未测试)

最后更新于

这有帮助吗?