Submission #98481

#TimeUsernameProblemLanguageResultExecution timeMemory
98481luciocfZoltan (COCI16_zoltan)C++14
42 / 140
713 ms512 KiB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 22;
const int mod = 1e9+7;

typedef long long ll;

int num[maxn], dp[maxn];

ll qtd[maxn];

int main(void)
{
	int n;
	ll q = 0LL;
	cin >> n;

	for (int i = 0; i < n; i++)
		cin >> num[i];

	int ans = 0;

	for (int mask = 0; mask < (1<<n); mask++)
	{
		int aux = 0;

		deque<int> dq;

		if (!(mask&1)) continue;

		for (int i = 0; i < n; i++)
		{
			if (mask&(1<<i)) dq.push_front(num[i]);
			else dq.push_back(num[i]);
		}

		vector<int> v;

		while (dq.size() > 0)
		{
			v.push_back(dq.front());
			dq.pop_front();
		}	

		memset(qtd, 0, sizeof qtd);

		for (int i = 0; i < v.size(); i++)
		{
			dp[i] = 1;
			for (int j = 0; j < i; j++)
				if (v[j] < v[i]) 
					dp[i] = max(dp[i], dp[j]+1);
		}

		for (int i = 0; i < v.size(); i++)
		{
			aux = max(aux, dp[i]);
			if (dp[i] == 1) qtd[i] = 1LL;
		} 

		if (aux < ans) continue;
		
		if (aux > ans) q = 0LL;
		ans = aux;

		for (int i = 0; i < v.size(); i++)
			for (int j = 0; j < i; j++)
				if (v[j] < v[i] && dp[j]+1 == dp[i])
					qtd[i] = (qtd[i]+qtd[j])%mod;

		for (int i = 0; i < v.size(); i++)
			if (dp[i] == ans) q = (q+qtd[i])%mod;
	}

	cout << ans << " " << q << "\n";
}

Compilation message (stderr)

zoltan.cpp: In function 'int main()':
zoltan.cpp:49:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < v.size(); i++)
                   ~~^~~~~~~~~~
zoltan.cpp:57:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < v.size(); i++)
                   ~~^~~~~~~~~~
zoltan.cpp:68:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < v.size(); i++)
                   ~~^~~~~~~~~~
zoltan.cpp:73:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < v.size(); i++)
                   ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...