Problem:
Score : 600 points

Problem Statement

You are given N integers. The i-th integer is a_i.
Find the number, modulo 998244353, of ways to paint each of the integers red, green or blue so that the following condition is satisfied:

Let R, G and B be the sums of the integers painted red, green and blue, respectively. There exists a triangle with positive area whose sides have lengths R, G and B.

Constraints

3 \leq N \leq 300

1 \leq a_i \leq 300(1\leq i\leq N)

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
a_1
:
a_N

Output

Print the number, modulo 998244353, of ways to paint each of the integers red, green or blue so that the condition is satisfied.

Sample Input 1

4
1
1
1
2

Sample Output 1

18

We can only paint the integers so that the lengths of the sides of the triangle will be 1, 2 and 2, and there are 18 such ways.

Sample Input 2

6
1
3
2
3
5
2

Sample Output 2

150

Sample Input 3

20
3
1
4
1
5
9
2
6
5
3
5
8
9
7
9
3
2
3
8
4

Sample Output 3

563038556

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=305;
const int MOD=998244353;
int add (int x,int y)   {x=x+y;return x>=MOD?x-MOD:x;}
int mul (int x,int y)   {return (LL)x*y%MOD;}
int dec (int x,int y)   {x=x-y;return x<0?x+MOD:x;}
int Pow (int x,int y)
{
	if (y==1) return x;
	int lalal=Pow(x,y>>1);
	lalal=mul(lalal,lalal);
	if (y&1) lalal=mul(lalal,x);
	return lalal;
}
int n;
int a[N];
int sum;
int ans=0;
int f[N][N*N];
int g[N][N*N];
int main()
{
	scanf("%d",&n);
	ans=Pow(3,n);ans=dec(ans,mul(3,Pow(2,n)));ans=add(ans,3);
	printf("%d\n",ans);	
	for (int u=1;u<=n;u++) 	{scanf("%d",&a[u]);}
	f[0][0]=1;g[0][0]=1;sum=0;
	for (int u=1;u<=n;u++)
	{
		for (int i=0;i<=sum;i++)
		{
			f[u][i]=add(f[u][i],f[u-1][i]);
			g[u][i]=add(g[u][i],mul(2,g[u-1][i]));
			
			f[u][i+a[u]]=add(f[u][i+a[u]],f[u-1][i]);
			g[u][i+a[u]]=add(g[u][i+a[u]],g[u-1][i]);
		}
		sum=sum+a[u];
	/*	for (int i=0;i<=sum;i++) printf("%d ",f[u][i]);
		printf("\n");*/
	}
	for (int u=(sum+1)/2;u<=sum;u++)
	{
		ans=dec(ans,mul(3,g[n][u]));
		ans=add(ans,mul(6,f[n][u]));
	}
	ans=dec(ans,3);
	printf("%d\n",ans);
	return 0;
}