0
点赞
收藏
分享

微信扫一扫

Array Division---简单DP

janedaring 2022-04-13 阅读 61
算法

题目链接

在这里插入图片描述

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
using namespace std;
#define int long long
const int N = 5010;
int sa[N],sb[N],f[N];
void solve()
{
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>sa[i],sa[i]=sa[i-1]+sa[i];
	for(int i=1;i<=n;i++)cin>>sb[i],sb[i]=sb[i-1]+sb[i];
	memset(f,-0x3f,sizeof f);
    f[0]=0;
    for(int i=1;i<=n;i++)
        for(int j=i-1;j>=0;j--)
            if(sa[i]-sa[j]>=sb[i]-sb[j])f[i]=max(f[i],f[j]+1);
    f[n]=f[n]<0?-1:f[n];
    cout<<f[n]<<'\n';
}

signed main()
{
	int T;cin>>T;
	while(T--)solve();
}
举报

相关推荐

0 条评论