求助,记忆化递归30分超时
查看原帖
求助,记忆化递归30分超时
540148
Universal_xtr楼主2021/8/27 11:31

如题,这是按照我们老师的方法写的,TLE求助。。。

#include<iostream>
#include<map>
#include<cstdio>
using namespace std;
typedef long long ll;
ll n;
ll a[100001];
ll s[100001];
map<ll,ll> jyh;
void read(ll &n){
	ll x=0,f=1;
	char ch=getchar();
	while(ch<'0' or ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0' and ch<='9'){
		x=(x<<1)+(x<<3)+ch-48;
		ch=getchar();
	}
	n=x*f;
}
void write(ll n){
    if(n>=10)write(n/10);
    putchar(n%10+48);
}
ll f(ll l,ll r){
    if(l==r)return 0;
    if(jyh[l*40000+r])return jyh[l*40000+r];
    ll ans=2147483647;
    for(ll i=l;i<r;i++)ans=min(ans,f(l,i)+f(i+1,r)+s[r]-s[l-1]);
    jyh[l*40000+r]=ans;
    return ans;
}
int main(){
    read(n);
    for(ll i=1;i<=n;i++){read(a[i]);s[i]=s[i-1]+a[i];}
    write(f(1,n));
    return 0;
}
2021/8/27 11:31
加载中...