タイトル説明
[著作権]
この適応は、タイトルを受ける権利。
[問題の説明]
ヒルは鳩、多くのTsugekiを作りました。鳥の行動は、そのウクライナのように、最初のテキスト、白くちばし、裸足は、シャオからその名兆銘と呼ばれます。ヤンは、それが女の赤ちゃんと呼ばれ、女の子です。赤ちゃんの女の子が東で泳ぐ、溺死は、それが兆銘で、戻りません。東シナ海に埋葬することは、しばしば木や石錫山タイトル。 - 「山海景」
最終的に満たされた東シナ海兆銘を出て行け!唯一の小さな領域の最後。同時に、西部丘陵上の木や石も不足しています。兆銘東シナ海はそれを埋めることができますか?
実際には、非東領域も左西山Nブロック、東のそれぞれの体積に閉じることができる少なくともV木材や石の量、及び木や石を充填する必要があり、それはタイトル、それぞれの物理的およびK所望しますメートル。兆銘は、あまりにも長い間で埋める再利用している、と彼女は疲れていた、彼女はCに体力を残しました。
入力形式
V、N、C:入力ファイルの最初の行は3の整数です。
第二行から行N + 1、それぞれ、そのタイトル東海所望の強度に木や石の各部分の体積に。
出力フォーマット
彼女は最大体力の残りの部分を埋めた後兆銘は、そうでない場合は「インポッシブル」出力(引用符なし)、東シナ海、東中国海の出力を埋めることができた場合、出力ファイルには、一行だけです。
サンプル入力と出力
100 2 10
50 5
50 5
0
2 1 10
50 5
10 2
不可能
説明/ヒント
[データ範囲]
データの20%を、0 <N <= 50。
データの50%、0 <N <= 1000。
データの100%まで、0 <N <= 10000、数平均は、すべて[0,10000]、最終結果<= cに属する読み取ります。
[問題解決のアイデア]
最後に、すべての場合に、残りの体力の出力は、低コスト化に、一般的なバックパックに変換する充填容積がより大きいか等しくなければならない場合、列挙充填することができる多くの物理ボリュームの費用がかかりますどのくらい後に、ある体積の値は、物理ボリュームであります「インポッシブル」、より少ないです。
【コード】
1 #include <cstdio>
2 #include <iostream>
3 #include <algorithm>
4 using namespace std;
5 int i,j,v,n,c,ans,k[10005],m[10005],dp[10005];
6 inline int max(int a,int b){
7 return a>b?a:b;
8 }
9 int main(){
10 //freopen("1510.in","r",stdin);
11 //freopen("1510.out","w",stdout);
12 scanf("%d%d%d",&v,&n,&c);
13 for(i=1;i<=n;i++)
14 scanf("%d%d",&k[i],&m[i]);
15 ans=-1;
16 for(i=1;i<=n;i++)
17 for(j=c;j>=m[i];j--)
18 dp[j]=max(dp[j],dp[j-m[i]]+k[i]);
19 for(i=1;i<=c;i++)
20 if(dp[i]>=v)ans=max(ans,c-i);
21 if(ans==-1)printf("Impossible\n");
22 else printf("%d\n",ans);
23 return 0;
24 }