Submission #19977

#TimeUsernameProblemLanguageResultExecution timeMemory
19977sui동전 (kriii4_E)C++14
100 / 100
54 ms2728 KiB
#define _CRT_SECURE_NO_WARNINGS // scanf(), gets() (needed for Visual C++)

//#define NDEBUG
#include <cassert>

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <functional>
#include <string>
#include <vector>

#include <queue>
#include <set>
#include <map>
#include <unordered_map>
#include <stack>
#include <deque>

using namespace std;

#define MEMSET(x, WITH) memset(x, (WITH), sizeof(x))
#define FOR(i, E) for(int i=0; i<(E); i++)
#define REP(i, LO, HI) for(int i=(LO); i<=(HI); i++)

#define GETINT(x) scanf("%d", &x)
#define GETDBL(x) scanf("%lf", &x)
#define GETSTR(x) scanf("%s", x)
#define NEWINT(x) int x; scanf("%d", &x)
#define NEWDBL(x) double x; scanf("%lf", &x)
#define NEWLN putchar('\n')

#ifdef _WIN32
#define popcnt __popcnt
#else
#define popcnt __builtin_popcount
#endif

typedef long long ll;
const ll MOD = 1000000007;
//const double PI = atan(1) * 4;




int N;




ll dp[253][2][256];


int main() {
	cin >> N;


	/*
	ll pow2[253];
	pow2[0] = 1;
	for (int i=1; i<=N; i++) pow2[i] = pow2[i-1] * 2 % MOD;
	*/



	dp[0][0][0] = 1;
	dp[0][1][0] = 1;


	//dp[1][0][0] = 1;
	//dp[1][1][1] = 1;

	for (int i=1; i<=N; i++) {

		for (int firstStep=1; firstStep<=i; firstStep++) {
			for (int s=0; s<256; s++) {
				dp[i][1][firstStep^s] += dp[i-firstStep][0][s];
				dp[i][1][firstStep^s] %= MOD;

				dp[i][0][s] += dp[i-firstStep][1][s];
				dp[i][0][s] %= MOD;
			}
		}

	}





	ll ans = dp[N][0][0] + dp[N][1][0];
	ans %= MOD;
	cout << ans << endl;
	


	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...