这个题目的难点是状态压缩和DP,详细的解题过程请参考http://www.cnblogs.com/rain-lei/archive/2012/08/04/2623314.html和http://blog.sina.com.cn/s/blog_8338b9050100vvpa.html两篇文章。
C++代码:
#include<stdio.h>
#include<memory.h>
const int MAX=1<<15;
const int INF=1<<30;
struct subject{
char name[110];
int deadline;
int cost;
}sub[16];
struct sequence{
int mincost;
int pre;
int nowtime;
}dp[MAX];
bool visited[MAX];
void output(int k,int t){
int v,cnt=0;
v=k^t;
while(v){
v=v>>1;
cnt++;
}
k=t;t=dp[t].pre;
if(t!=-1)
output(k,t);
printf("%s\n",sub[cnt-1].name);
}
int main(){
int icase,n;//freopen("1.txt","r",stdin);
scanf("%d",&icase);
while(icase--){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%s %d%d",sub[i].name,&sub[i].deadline,&sub[i].cost);
int bnumb=1<<n;
dp[0]