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; } }