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;
}
}
浙公网安备 33010602011771号