hdu 1074

又是状态压缩的dp。

要输出路径,那只要记录每个状态的前一个状态,就能那样递归输出了。

贴代码。

#include  
#include  
#include  
using namespace std;  
struct node{  
    string name;             
    int d;                                  //截止日期  
    int c;                                  //需要花费日期   
}hw[20];  
  
struct point{  
    int now,pre;                           //当前状态id,与过去状态id  
    int now_time;                          //当前时间  
    int score;                             //当前最少花费  
    int key;                               //当前课程的id  
      
}dp[40000];  
int main(){  
    int t,n,i,j;  
      
    cin>>t;  
      
    while(t--){  
        cin>>n;  
        for(i=0;i>hw[i].name>>hw[i].d>>hw[i].c;  
          
        dp[0].now_time=0;  dp[0].score=0;   dp[0].now=0;  
          
        for(i=1;i<(1<<(n));i++){  
            dp[i].score=1000000000;  
            for(j=n-1;j>=0;j--){  
                if(i&(1<hw[j].d)  
                        temp=dp[pre_id].now_time+hw[j].c-hw[j].d;  
                    else temp=0;  
                      
                      
                    if(dp[pre_id].score+tempst;  
        cout<


你可能感兴趣的:(hdu 1074)