Doing Homework HDU - 1074 状态压缩
2024-09-06 18:46:37
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=(<<)+;
const int MOD=1e9+;
int dead[],cost[];
int dp[MAXN],t[MAXN];
char s[][];
int pre[MAXN];
void print(int x)
{
if(x==)
return;
print(x^(<<pre[x]));
printf("%s\n",s[pre[x]] );
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(pre,,sizeof pre);
int n;
scanf("%d",&n);
for(int i=; i<n; i++)
scanf("%s%d%d",s[i],&dead[i],&cost[i] );
for(int i=; i<(<<n); i++)
{
dp[i]=INF;
for(int j=n-; j>=; j--)
{
int tmp=<<j;
//如果没有做
if(! (i&tmp) )
continue;
//做这个题之后的分数+花费-期限=扣得分
int score=t[i^tmp]+cost[j]-dead[j];
//如果小于,说明不扣分
if(score<)
score=;
//如果当前的状态扣的分数 > 做这个题之后扣的分
if(dp[i]>dp[i^tmp]+score)
{
//分数
dp[i]=dp[i^tmp]+score;
//花的时间
t[i]=t[i^tmp]+cost[j];
//转移状态,这个状态下做的题
pre[i]=j;
}
}
}
printf("%d\n", dp[(<<n)-]);
print((<<n)-);
}
return ;
}
最新文章
- 用Intent实现activity的跳转
- Linux系统日志及日志分析
- [Head First Python]2. BIF(内置函数)
- poj3673---双重for循环
- webstorm入门1-主题和配色
- 北风风hadoop课程体系
- CentOS7 emacs安装
- ios8指纹识别
- leetcode第一刷_Populating Next Right Pointers in Each Node II
- Ubuntu系统怎么切换多用户命令界面
- 《剑指offer》二叉树的深度
- python 练习2
- maven+Spring+SpringMVC+Hibernate快速搭建
- Linux脚本点滴
- vm虚拟机下ubuntu连接上ssr
- SecureCR 改变背景色和文字颜色
- 微软Office Online服务安装部署(一)
- idea及webstorm破解方法(转)
- 论文笔记——Deep Residual Learning for Image Recognition
- ML(4): 决策树分类