P2214求调
  • 板块题目总版
  • 楼主Richey808
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/1/16 11:52
  • 上次更新2025/1/16 15:48:30
查看原帖
P2214求调
1345133
Richey808楼主2025/1/16 11:52

#include<bits/stdc++.h>
#define int long long
using namespace std;
int v[100],x[110];
int s[110];
int dp[100010];
int n,b;
int s_dp(int n)
{
	dp[0]=0;
	for(int i=1;i<=100000;i++)dp[i]=0;
	int c;
	for(int i=1;i<=n;i++)
	{
		c=100000;
		for(int j=1;j<=b;j++)
			if(i-v[j]>=0)
				c=min(c,dp[i-v[j]]);
		dp[i]=c+1;
	}
	return dp[n];
}
signed main()
{
	cin>>n>>b;
	for(int i=1;i<=b;i++)cin>>v[i];
	for(int i=1;i<=n;i++)cin>>x[i];
	s[1]=x[1];
	for(int i=2;i<=n;i++)
	{
		if(x[i-1]==0)s[i]=x[i]-x[i-1];
		else s[i]=x[i]-x[i-1]+1;
	}
//	for(int i=1;i<=n;i++)cout<<s[i]<<' ';
	int ans=0;
	for(int i=1;i<=n;i++)
		if(s[i]>0)ans+=s_dp(s[i]);
		else if(s[i]<0)
		{
			cout<<-1;
			return 0;
		}
	cout<<ans;
	return 0;
}
/*
5 2
5
7
0
2
3
4
5



-1
*/
2025/1/16 11:52
加载中...