P1510 精卫填海 题解

P1510 精卫填海

#include<iostream>
using namespace std;
long long dp[45001];
int s[10001],t[10001];
int main()
{
	int v,n,c;
	cin>>v>>n>>c;
	for (int i=1;i<=n;i++)
	{
		cin>>s[i]>>t[i];
	}
	for (int i=1;i<=n;i++)
	{
		for (int j=c;j>=t[i];j--)
		{
			dp[j]=max(dp[j],dp[j-t[i]]+s[i]);
		}
	}
	if (dp[c]>=v)
	{
		for (int i=1;i<=c;i++)
		{
			if (dp[i]>=v)
			{
				cout<<c-i;
				break;
			}
		}
	}
	else
	{
		cout<<"Impossible"<<endl;
	}
	
 } 

  

posted @ 2022-03-21 07:06  心悟&&星际  阅读(29)  评论(0编辑  收藏  举报