蒟蒻,代码求调
  • 板块题目总版
  • 楼主Alemirai
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/13 21:42
  • 上次更新2024/5/14 12:41:27
查看原帖
蒟蒻,代码求调
1220203
Alemirai楼主2024/5/13 21:42

P1874 快速求和

#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <math.h>
using namespace std;
struct sum
{
	int num,time;
};
string a;
int n,len,f[42],org[42][42];
vector<sum>dp[42];
void make()
{
	for(int i=1;i<=len;i++)
	{
		for(int j=i+1;j<=i+42;j++)
		{
			if(j>len||org[i][j-i-1]>=1e5)
			{
				break;
			}
			org[i][j-i]=org[i][j-i-1]*10+f[j];
		}
	}
}
int main()
{
	cin>>a;
	cin>>n;
	len=a.length();
	for(int i=0;i<len;i++)
	{
		if(a[i])
		f[i+1]=a[i]-'0';
	}
	dp[1].push_back({f[1],0});
	make();
	for(int i=2;i<=len;i++)
	{
		if(i<=5)
		{
			dp[i].push_back({int(f[1]*pow(10,(i-1))+org[1][i-1]),0});
		}
		for(int j=i-1;j>0;j--)
		{
			for(auto y:dp[j])
			{
				if(y.num+org[j][i-j]>n)continue;
				dp[i].push_back({y.num+org[j][i-j],y.time+1});
			}
		}
	}
	int ans=0x3f3f3f3f;
	for(auto y:dp[len])
	{
		if(y.num==n)
		{
			ans=min(ans,y.time);
		}
	}
	if(ans==0x3f3f3f3f)
	{
		cout<<-1;
	}
	else
	{
		cout<<ans;
	}
	
}

代码思路没问题,就是后面三个点超内存,能不能提供一些减小内存的方法

2024/5/13 21:42
加载中...