小飛俠的遊園方案-P1028

描述
經過抽籤選擇,小智將軍第一個進入考場。
菜蟲:(身上散射出華貴(?)的光芒)歡迎你,第一位挑戰者!!
小智:……(走到菜蟲身後,關燈)女王陛下,雖然我們國家現在很富裕,但也請您不要浪費電來用這麼大功率的燈泡。
菜蟲(汗):啊啊愛卿所言甚是那麼,你的題目是……我們的情報組織探聽到敵人的重要將領——小飛俠星期天會邀他的靈兒妹妹到公園去玩。公園裏有很多娛樂項目,可並不是每一項他們都喜歡,所以他們對每一項都進行了“喜歡度”的評分。因爲小飛俠也是一個了不起的角色,所以他一定會選擇在有限時間內的最好的方案。現在要你做的就是找出在規定時間內他們選擇哪幾項不同的活動可以使其“喜歡度”之和達到最大,據此我們就可以知道他會在哪些地方出現,從而在那裏派人看守了。
小智:(燈泡一亮)每個地方都派人看守不就行了?!
“當~~~”
菜蟲:(手執八公分直徑炒鍋,筋)……你是白癡嗎?-_-##(都派人去看守的話我們會有多少桌三缺一?!)聽好了,輸入格式是第一行一個正整數N(1<=N<=100)表示總共的娛樂項目數;第二行一個正整數表示規定的時間t;下面有N行,其中第i+2行有兩個正整數fi(0<=fi<=100)和ti(ti<=100),分別表示對項目i的“喜歡度”和它所耗費的時間。輸出的時候在第一行輸出最大的“喜歡度”之和,下面給你一個樣例:
輸入:
3
5
1 2
5 5
4 3
輸出:
5

#include <iostream>
using namespace std;
int max(int a,int b){
    if(a>b) return a;
    return b;
}
int main(){
    int N;
    cin>>N;
    int t;
    cin>>t;
    int fi[1002],ti[1002];
    for (int i=0;i<N;i++)
    {
        cin>>fi[i]>>ti[i];
    }
    int dp[1002]={0};
    for (int i=0;i<N;i++)
    {
        for (int j=t;j>=ti[i];j--)
        {
            dp[j]=max(dp[j],dp[j-ti[i]]+fi[i]);
        }
    }
    cout<<dp[t];
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章