【题解】codeforces1058C[Codeforces Round #512 Div.2 C]C.Vasya and Golden Ticket 区间DP

32 篇文章 0 订阅
15 篇文章 0 订阅

Description

Recently Vasya found a golden ticket — a sequence which consists of n n n digits a 1 a 2 ⋯ a n ‾ \overline{a_1a_2\cdots a_n} a1a2an. Vasya considers a ticket to be lucky if it can be divided into two or more non-intersecting segments with equal sums. For example, ticket 350178 350178 350178 is lucky since it can be divided into three segments 350 350 350, 17 17 17 and 8 8 8: 3 + 5 + 0 = 1 + 7 = 8 3+5+0=1+7=8 3+5+0=1+7=8. Note that each digit of sequence should belong to exactly one segment.

Help Vasya! Tell him if the golden ticket he found is lucky or not.

Input

The first line contains one integer n n n ( 2 ≤ n ≤ 100 2≤n≤100 2n100) — the number of digits in the ticket.

The second line contains n n n digits a 1 a 2 ⋯ a n ‾ \overline{a_1a_2\cdots a_n} a1a2an ( 0 ≤ a i ≤ 9 0≤a_i≤9 0ai9) — the golden ticket. Digits are printed without spaces.

Output

If the golden ticket is lucky then print “YES”, otherwise print “NO” (both case insensitive).

Examples

Input

5
73452

Output

YES

Input

4
1248

Output

NO

Note

In the first example the ticket can be divided into 7 7 7, 34 34 34 and 52 52 52: 7 = 3 + 4 = 5 + 2 7=3+4=5+2 7=3+4=5+2.

In the second example it is impossible to divide ticket into segments with equal sum.


区间DP。设 F [ p o s ] F[pos] F[pos] 表示 p o s pos pos 位是否可以作为一段的结尾。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,sum[110];
bool f[110];
char ch;
int main()
{
    std::ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>ch,sum[i]=sum[i-1]+ch-'0';
    if(sum[n]==0)return puts("YES"),0;
	for(int i=0;i<sum[n];i++)
    {
    	memset(f,false,sizeof(f));
    	f[0]=true;
    	for(int t=1;t<=n;t++)
    	    for(int h=t;h;h--)
    	        if(f[h-1]&&sum[t]-sum[h-1]==i)
    	            f[t]=true;
    	if(f[n]==true)return puts("YES"),0;
	}
	return puts("NO"),0;
}

总结

原本想暴力的,结果错了……刚好写写DP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值