hdu1881 畢業bg 搜索版本

這道題目於最大報銷額有些不同,這道題目不需要特別的減枝策略,但各個bg之間不是平等地位的,在之前那道題目中對初始數據的順序沒有什麼要求,因爲前面得有沒有加進來對後面的抉擇沒有根本上的限制,探查順序會考慮所有有意義的路徑,而這道題目不同,考慮一種最極端的情況,我們把bg信息按從大到小的順序排序,這樣我們明顯發現在所有bg信息中我們只能選擇一個加入,因爲只要有一個選上後面的根本沒有機會,這樣我們可以把可以協調安排的兩場bg因爲探查順序而變得不能共存,因爲此過程並不是與探查順序無關的,只有按照結束時間限制從大到小的順序進行探查,才能最大可能地挖掘可能共存的信息。好好體會

 

 

#include<iostream>
#include<algorithm>
using namespace std;
struct bg
{
    int degree,last,deadline;
};
int maxbg;
bg record[32];

int cmp(bg x,bg y)//˳Ðò¾ø¶ÔÖØÒªÂð ·´¹ýÀ´¾ÓÈ»ÊÇ´íµÄ
{
    return x.deadline>y.deadline;
}
void dfs(int i,int n,int deg,int dead)
{
    if(i==n)
    {
        if(deg>maxbg)maxbg=deg;return;
    }
    dfs(i+1,n,deg,dead);
    if(dead+record[i].last<=record[i].deadline)
        dfs(i+1,n,deg+record[i].degree,dead+record[i].last);

}
int main()
{
    int n;
    while(cin>>n&&n>=0)
    {
        for(int i=0;i<n;i++)
            cin>>record[i].degree>>record[i].last>>record[i].deadline;
        sort(record,record+n,cmp);
        maxbg=0;
        dfs(0,n,0,0);
        cout<<maxbg<<endl;
    }
    return 0;
}

發佈了39 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章