#include<iostream>
using namespace std;
int v,n,c;
int dp[100050];
int k[10050];
int m[10050];
int t[10050];
int main(){
cin >> v >> n >> c;
int i,j;
for(i = 1; i <= n; ++i)
cin >> k[i] >> m[i];
for(i = 1; i <= n; ++i){
for(j = c; j>= 1; --j){
if(j >= m[i]){
dp[j] = max(dp[j],dp[j-m[i]]+k[i]);//z转移方程
}
}
}
for(int i=1;i<=c;i++)//寻找最小的j,使大海填满
{
if(dp[i]>=v)
{
cout<<c-i;
return 0;
}
}
cout << "Impossible";//没找到j
return 0;
}
洛谷P1510 精卫填海
最新推荐文章于 2022-12-22 23:00:09 发布