
最开始想使用dfs,发现范围过大无法在规定时间运行
- #include
- using namespace std;
- const int N = 2e5 + 10;
- int a[N], v[N], ans;
- void dfs(int dep, int sum, int start)
- {
- if(sum > 2019)return;
- if(dep > 3)return;
- if(dep == 3)
- {
- int flag = 0;
- for(int i = 0; i < 3; i ++)
- {
- int x = a[i];
- //cout << x << ' ';
- while(x)
- {
- int y = x % 10;
- x /= 10;
- if(y == 2 || y == 4)flag = 1;
- }
- }
- if(!flag && sum == 2019)ans ++;
- //cout << '\n';
- return;
- }
- for(int i = start; i <= 2017; i ++)
- {
- a[dep] = i;
- dfs(dep + 1, sum + i, i + 1);
- a[dep] = 0;
- }
- }
- int main()
- {
- dfs(0, 0, 1);
- cout << ans;
- return 0;
- }
故直接简单枚举即可
- #include
- using namespace std;
- int ans;
- bool check(int n)
- {
- while(n)
- {
- int y = n % 10;
- if(y == 2 || y == 4)return false;
- n /= 10;
- }
- return true;
- }
- int main()
- {
- for(int i = 1; i <= 2019; i ++)
- {
- for(int j = i + 1; j <= 2019; j ++)
- {
- int k = 2019 - i - j;
- if(check(i) && check(j) && check(k))
- {
- if(j < k)ans ++;
- }
- }
- }
- cout << ans;
- }