洛谷P1048 [NOIP2005 普及組] 采藥
題目描述
辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫(yī)師。為此,他想拜附近最有威望的醫(yī)師為師。醫(yī)師為了判斷他的資質(zhì),給他出了一個難題。醫(yī)師把他帶到一個到處都是草藥的山洞里對他說:“孩子,這個山洞里有一些不同的草藥,采每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間里,你可以采到一些草藥。如果你是一個聰明的孩子,你應該可以讓采到的草藥的總價值最大?!?/p>
如果你是辰辰,你能完成這個任務嗎?
輸入格式
第一行有?22?個整數(shù)?T(1≤T≤1000)和?M(1≤M≤100),用一個空格隔開,T?代表總共能夠用來采藥的時間,M?代表山洞里的草藥的數(shù)目。
接下來的?M?行每行包括兩個在?1?到100?之間(包括?1?和?100)的整數(shù),分別表示采摘某株草藥的時間和這株草藥的價值。
輸出格式
輸出在規(guī)定的時間內(nèi)可以采到的草藥的最大總價值。
輸入輸出樣例
輸入 #1復制
70 3 71 100 69 1 1 2
輸出 #1復制
3
說明/提示
【數(shù)據(jù)范圍】
對于?30%30%?的數(shù)據(jù),M≤10;
對于全部的數(shù)據(jù),M≤100。
【題目來源】
NOIP 2005 普及組第三題
#include <iostream>
#include <algorithm>
using namespace std;
int dp[1005];
int main()
{
int T,M,v,w;
cin>>T>>M;
for(int i=1;i<=M;i++)
{
cin>>v>>w;
for(int j=T;j>=v;j--)
dp[j]=max(dp[j],dp[j-v]+w);
}
cout<<dp[T]<<endl;
return 0;
}