考虑到n只有15,那么状压DP即可。

  题目要求说输出字典序最小的答案的顺序,又考虑到题目给出的字符串本身字典序是递增的,那么枚举i的时候倒着来即可。因为在同样完成的情况下,后选字典序大的,小的字典序就会在前面,那么整体的字典序就会更小。代码如下:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <string>
#include <iostream>
#include <stack>
using namespace std;
const int inf = 0x3f3f3f3f; struct node
{
string name;
int cost,deadline;
}a[];
struct state
{
int pre,now;
int t,score;
}dp[<<]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=;i<n;i++) cin >> a[i].name >> a[i].deadline >> a[i].cost;
int all = << n;
for(int mask=;mask<all;mask++)
{
dp[mask].score = inf;
for(int i=n-;i>=;i--)
{
if(mask & (<<i))
{
int pre = mask - (<<i);
int add = dp[pre].t + a[i].cost - a[i].deadline;
if(add < ) add = ;
if(dp[pre].score + add < dp[mask].score)
{
dp[mask].score = dp[pre].score + add;
dp[mask].pre = pre;
dp[mask].now = i;
dp[mask].t = dp[pre].t + a[i].cost;
}
}
}
}
int temp = all - ;
printf("%d\n",dp[temp].score);
stack<int> S;
while(temp)
{
S.push(dp[temp].now);
temp = dp[temp].pre;
}
while(!S.empty())
{
int x = S.top(); S.pop();
cout << a[x].name << endl;
}
}
return ;
}

最新文章

  1. 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView
  2. zookeeper集群管理配置优化总结
  3. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中
  4. 深入理解java虚拟机【Java虚拟机垃圾收集器】
  5. Leetcode: Self Crossing
  6. asp.net dropdownlist和listbox
  7. Web系统大规模并发----电商秒杀与抢购
  8. UWP入门一 7天酒店客户端源码及说明
  9. PYTHON---FILE IO
  10. Wow! Such Doge! - HDU 4847 (水题)
  11. Android-transulcent-status-bar
  12. 垃圾回收GC——JVM之七
  13. birkenfeld / sphinx-contrib — Bitbucket
  14. solr6.6教程-基础环境搭建(二)
  15. 文件服务器的详细配置之共享权限与NTFS权限的设置
  16. 一步步建立 Vue + Cesium 初始化项目
  17. python之做一个简易的翻译器(一)
  18. object detection[rfcn]
  19. Opencv画图操作
  20. BZOJ.4650.[NOI2016]优秀的拆分(后缀数组 思路)

热门文章

  1. .net core +gogs + jenkins +docker自动化发布、部署
  2. sftp配置多个用户权限的问题
  3. 微信小程序wx:key以及wx:key=&quot; *this&quot;详解:
  4. For... in 及 For… of 及 forEach
  5. printPreviewControl1怎么刷新文档
  6. [LeetCode] 17. 电话号码的字母组合 ☆☆☆(回溯) ###
  7. json —— pickle 的序列化和反序列化
  8. MFC编程——Where is WinMain?
  9. 共用dll如何扩展
  10. 动态规划1——最长递增子序列、最长公共子序列、最长公共子串(python实现)