啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,一开始我就不知道怎么写,然后看了题解是状压DP,后来去看了看状压DP也就这样嘛,但是难点,可以说是不熟悉的地方吧。。。如下:

第一、我们能很快的知道状压DP的原理:

就比如我们要考虑一些状态的时候,比如做这题做作业,有N[0 , 15]个作业,我们要表示1,2,3,….,n个作业的状态,我们可以用1/0来表示作业的状态是做完或者没做完。1101 :1号做完,3号做完,4号做完,加入我们开一个数组,当然1e15大的数组也不行,当然如果N再小一点,我们硬要去用数组存起来,那么那些156,8494这样的下标就变得没有意义。所以,我们可以利用二进制用13的二进制1101代表:1号做完,3号做完,4号做完作业。

这样的我们就叫做,状态压缩

第二、其实第一很好理解的,但是难点就是状态的转化,后来还是很简单,判断一下就好了,任何超出的时间代表扣的分数,每次用中间值temp=前面的扣分+当前扣分,如果这种状态访问过了,比较当前扣分,取小

第三、也是最不熟悉的,位运算,一个是按位或,一个状态下,如果该状态没有该作业,用cur | j 加进去。所以还有就是按位异或,

采用异或运算,相同的就会消去,留下的值的二进制就是某个作业的二进制

#include<iostream>
#include<cstdio>
#include<math.h>
#include<queue>
#include<map>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1.0) const int N=1<<16;
struct asd{
int cost;
int pre; //记录前一状态,记录路径。
int reduce;
}dp[N];
bool vis[N];
struct cd{
int die;
int cost;
char name[150];
}cou[19]; void outt(int x)
{
int curjob=dp[x].pre^x; //采用异或运算,相同的就会消去,留下的值的二进制就是某个作业的二进制
int curid=0;
curjob>>=1;
while(curjob) //右移,得出第几个作业。
{
curid++;
curjob>>=1;
}
if(dp[x].pre!=0)
{
outt(dp[x].pre);
}
printf("%s\n",cou[curid].name);
} int main()
{
int n,i,j;
int t;
cin>>t;
while(t--)
{
scanf("%d",&n);
int upp=1<<n;
int dayup=0;
for(int i=0;i<n;i++){
scanf("%s%d%d",cou[i].name,&cou[i].die,&cou[i].cost);
dayup+=cou[i].cost;
}
memset(vis,0,sizeof(vis));
dp[0].cost=0;
dp[0].pre=-1;
dp[0].reduce=0;
vis[0]=1;
int work;
int tup=upp-1;
for(j=0;j<tup;j++){
for(work=0;work<n;work++){ //从第一份工作开始
int cur=1<<work;
if((cur&j)==0){ //该项工作尚未做过。
int curtemp=cur|j; //加进去。
int day=dp[j].cost+cou[work].cost; //总花费
dp[curtemp].cost=day;
int reduce=day-cou[work].die; //超出预期时间的reduce。
if(reduce<0)
reduce=0;
reduce+=dp[j].reduce;
if(vis[curtemp]){
if(reduce<dp[curtemp].reduce){
dp[curtemp].pre=j;
dp[curtemp].reduce=reduce;
}
else if(reduce==dp[curtemp].reduce){ //但是这里输入本来就是按照字典序,所以不判断也没事。
if(dp[curtemp].pre>j){
dp[curtemp].pre=j;
}
}
}
else{
vis[curtemp]=1;
dp[curtemp].pre=j;
dp[curtemp].reduce=reduce;
}
}
}
}
printf("%d\n",dp[tup].reduce);
outt(tup);
}
return 0;
}

hdoj1074【A的无比爆炸】的更多相关文章

  1. noip2017爆炸记——题解&总结&反省(普及组+提高组)

    相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...

  2. Good Bye 2016 //智商再次下线,边界爆炸.....

    A B很水就略了.. C.又是一次wannafly一样的判断区间的.....  边界设为2000000  正好GG...... fst的时候立马想到上次也是这么wa过的...... 所以下次遇到这种题 ...

  3. Codeforces Round #384 (Div. 2) //复习状压... 罚时爆炸 BOOM _DONE

    不想欠题了..... 多打打CF才知道自己智商不足啊... A. Vladik and flights 给你一个01串  相同之间随便飞 没有费用 不同的飞需要费用为  abs i-j 真是题意杀啊, ...

  4. 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

    自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  5. Atitit 游戏引擎---物理系统(1)------爆炸效果

    Atitit 游戏引擎---物理系统(1)------爆炸效果 1.1. 动画框架的来源flex,jqueryuijs,anim , cocos2d 1 1.2. Jqueryui的特效库 1 1.3 ...

  6. [读码]HTML5像素文字爆炸重组

    [边读码,边学习,技术也好,思路也罢] [一款基于HTML5技术的文字像素爆炸重组动画特效,我们可以在输入框中指定任意文字,点击确定按钮后,就会将原先的文字爆炸散去,新的文字以像素点的形式组合起来,看 ...

  7. 《2016ThoughtWorks技术雷达峰会----js爆炸下的技术选型》

    JS爆炸下的技术选型  刘尚奇    ThoughtWorks, 高级咨询师 JS每6个星期出现一个新框架,那么如何进行JS的选型.以下从四个方面来分析. 1.工具 NPM for all the t ...

  8. 【转】15个无比华丽的HTML5/CSS3动画应用

    原文转自:http://www.html5cn.org/article-7089-1.html 前几天,HTML5标准已经尘埃落定,未来的Web将会是由HTML5主导,当然作为开发者对这一喜讯更为动心 ...

  9. css3爆炸效果更换图片轮播图

    思路:给一个div设置一个背景图片1.jpg,然后在这个div上面用两个for循环动态的创建一个列数为C行数为R数量的span,并给这些span设置宽高.定位并设置背景图片0.jpg,然后设置每个sp ...

随机推荐

  1. 用Perl发送邮件小例子

    据传,Perl发送邮件有很多方案,但我只会用Mail::Sender这种方式,也就只能简单谈谈这种方式. 在参考众多网页后,程序书写如下: #!/usr/bin/perl -w use Mail::S ...

  2. MongoDB:数据模型介绍

    在MongoDB的数据有灵活的模式.不像SQL数据库,(SQL数据库)要求你必须在插入数据之前决定和声明一个表的模式.MongoDB的集合不强制文档的结构.这个灵活性有利于文档到实体或对象的映射. 每 ...

  3. plsql 无需配置客户端连接.

    plsql 无需配置客户端连接. (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521)))(C ...

  4. 【翻译自mos文章】多租户中的service管理

    来源于: Service Management For Multitenant (文档 ID 2009500.1) APPLIES TO: Oracle Database - Enterprise E ...

  5. 龙书D3D11章节习题答案(第四章)

    下面答案仅供參考,有错欢迎留言. Chapter 4:Direct3D Initialzation    1. Modify the previous exercise solution by dis ...

  6. eclipse通过maven建立java se工程配置log4j,打包成zip,将jar包和配置文件分开,并以bat和sh文件启动java程序

    一.新建maven的java工程 1.eclipse里file-new-other,选择maven Project 2.选中 Use default Workspace location,然后 nex ...

  7. 用Java编写的http下载工具类,包含下载进度回调

    HttpDownloader.java package com.buyishi; import java.io.FileOutputStream; import java.io.IOException ...

  8. java 获取项目根目录

    代码入下: request.getSession().getServletContext().getRealPath(); 这里的getRealPath()括号里面可以输入你想得到的具体目录. 需要注 ...

  9. 数据库连接池-配置 wallfilter问题解决-UncategorizedSQLException

    wallFilter对sql有着严格的校验,会对有风险的sql过滤,抛出异常信息: org.springframework.jdbc.UncategorizedSQLException: ### Er ...

  10. SET IDENTITY_INSERT 和 DBCC CHECKIDENT

    SET IDENTITY_INSERT (Transact-SQL) Allows explicit values to be inserted into the identity column of ...