dalao求解P2891
  • 板块灌水区
  • 楼主zhoukaixiang
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/26 22:25
  • 上次更新2023/10/27 05:42:23
查看原帖
dalao求解P2891
832244
zhoukaixiang楼主2022/10/26 22:25
#include<bits/stdc++.h>
using namespace std;
long long n, t, sum, mini = LONG_LONG_MAX, v[1005], c[1005], dp[1000005], p[1000005];
signed main()
{
	cin >> n >> t;
	for(int i = 1; i <= n; i ++)
	{
		cin >> v[i]; 
	}
	for(int i = 1; i <= n; i ++)
	{
		cin >> c[i];
		sum += v[i] * c[i];
	}
	if(sum < t) 
	{
		cout << -1;
		return 0;
	} 
	memset(dp, 0x3f, sizeof dp);
	memset(p, 0x3f, sizeof p);
	dp[0] = 0;
	p[0] = 0;
	for(int i = 1; i <= n; i ++)
	{
		for(int k = 1; k <= c[i]; k ++)
		{
			for(int j = sum; j >= v[i] * k; j --)
			{
				dp[j] = min(dp[j], dp[j - v[i] * k] + k);
			}
		} 
	} 
	for(int i = 1; i <= n; i ++)
	{
		for(int j = v[i]; j <= sum; j ++)
		{
			p[j] = min(p[j], p[j - v[i]] + 1);
		}
	} 
	for(int i = 1; i <= sum; i ++)
	{
		mini = min(mini, p[i] + dp[t + i]); 
	}
    if(mini > INT_MAX)  cout << -1;
	else  cout << mini;
	return 0;
}
1 RE + 3 AC + 2 WA + 4 TLE
2022/10/26 22:25
加载中...