SDNU 1423.入学考试(01背包)
生活随笔
收集整理的這篇文章主要介紹了
SDNU 1423.入学考试(01背包)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Description
問題描述 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫(yī)師。為此,他想拜附近最有威望的醫(yī)師為師。醫(yī)師為了判斷他的資質(zhì),給他出了一個難題。醫(yī)師把他帶到一個到處都是草藥的山洞里對他說:“孩子,這個山洞里有一些不同的草藥,采每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間里,你可以采到一些草藥。如果你是一個聰明的孩子,你應(yīng)該可以讓采到的草藥的總價值最大。” 如果你是辰辰,你能完成這個任務(wù)嗎? 輸入格式 第一行有兩個整數(shù)T(1? < =? T? < =? 1000)和M(1? < =? M? < =? 100),用一個空格隔開,T代表總共能夠用來采藥的時間,M代表山洞里的草藥的數(shù)目。接下來的M行每行包括兩個在1到100之間(包括1和100)的整數(shù),分別表示采摘某株草藥的時間和這株草藥的價值。 輸出格式 包括一行,這一行只包含一個整數(shù),表示在規(guī)定的時間內(nèi),可以采到的草藥的最大總價值。 樣例輸入 70? 3 71? 100 69? 1 1? 2 樣例輸出 3 數(shù)據(jù)規(guī)模和約定 對于30%的數(shù)據(jù),M? < =? 10; 對于全部的數(shù)據(jù),M? < =? 100。Input
Output
Sample Input
Sample Output
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> using namespace std; #define ll long long ll t,m,dp[1000+8][1000+8],w[1000+8],v[1000+8]; void solve() {for(ll i=m-1;i>=0;i--){for(ll j=0;j<=t;j++){if(j<w[i]){dp[i][j]=dp[i+1][j];}else{dp[i][j]=max(dp[i+1][j] , dp[i+1][j-w[i]]+v[i]);}}}printf("%lld\n",dp[0][t]); } int main() {scanf("%lld%lld",&t,&m);for(ll i=0;i<m;i++){scanf("%lld%lld",&w[i],&v[i]);}solve();return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/RootVount/p/11252974.html
總結(jié)
以上是生活随笔為你收集整理的SDNU 1423.入学考试(01背包)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SDNU 1427.分解质因数(水题)
- 下一篇: 利用CSIDL打开特殊文件夹