DP训练 cdoj1354 柱爷很忙 [状压DP]
来源:互联网 发布:java中嵌套循环 编辑:程序博客网 时间:2024/05/18 09:14
找到原题 真当我不做CDOJ?
工作 (work.pas/cpp/c)
【题目描述】
有N件事,每件事有两个属性a,b,现在你要以某种顺序做完这N件事,考虑这个人目前做的事情是i,他做的前一件事是j,那么他做这件事的代价就是(a[i] | a[j]) – (a[i] & a[j]),如果前面没有做事,那么代价就是a[i],但是事情总有轻重缓急之分,按原本顺序的事i最多能推迟到做完任意件紧接着事i之后的事j,i < j <= i + b[i]后做,即原本顺序的事k,k > i + b[i] ,不能在事i之前完成。
【输入格式】
输入的第一行是一个整数N,表示要做N件事。
接下来N行,每行两个数,表示 a[i]和b[i]。
【输出格式】
输出一个整数表示最小可能的最大传递时间
【样例输入】
2
5 1
4 0
【样例输出】
5
【数据范围】
20%的数据保证:1 <= N <= 15。
100%的数据保证:1 <= N , a[i] <= 1000 , 1 <= b[i] <= 7。
思考
每次决策只有两种,
先取出之间没做的某件事v做了,即
将第i件事压下暂时不做,即
显然这两种转移已经包含了所有情况。
复杂度
#include <bits/stdc++.h>using namespace std;const int maxn = 1e3 + 25;const int inf = 0x7f7f7f7f ;int a[maxn] , b[maxn] , N , dp[maxn][1 << 8][20] ;vector < int > sa;inline void update( int & x , int v ){ x = min( x , v ); }inline int cal ( int x , int y ){ return (x | y) - (x & y); }inline int get ( int x , int y ){ return x >> y & 1 ;}void Init(){ memset( dp , 0x7f , sizeof( dp ) );}int main(int argc,char *argv[]){ scanf("%d",&N); for(int i = 1 ; i <= N ; ++ i) scanf("%d%d" , a + i , b + i); Init(); dp[0][ ( 1 << 8 ) - 1][19] = 0; for(int i = 0 ; i <= N ; ++ i) for(int j = 0 ; j < (1 << 8) ; ++ j) for(int k = 0 ; k < 20 ; ++ k) if( dp[i][j][k] != inf ){ int ed = min( i , 8 ) , limit = inf; for( int v = ed - 1 ; v >= 0 ; -- v) if( (( j >> v) & 1) == 0 ) limit = min( limit , i - v + b[ i - v ] ); if( get( j , 7 ) == 1 ) update( dp[ i + 1 ][ (j^(1<<7))<<1 ][ min( k + 1 , 19 ) ] , dp[i][j][k] ); for( int v = ed - 1 ; v >= 0 && i - v <= limit ; -- v) if( (j >> v & 1) == 0 ) update( dp[i][j | (1 << v)][v] , dp[i][j][k] + ( (k == 19) ? a[ i - v ] : cal( a[ i - v ] , a[ i - k ] ) ) ); } int ans = inf; for(int i = 0 ; i < 20 ; ++ i) ans = min( ans , dp[N][(1<<8)-1][i] ); printf("%d\n" , ans ); return 0;}
- DP训练 cdoj1354 柱爷很忙 [状压DP]
- 状压dp训练
- DP训练 CDOJ1321柱爷的恋爱 [区间dp]
- dp训练
- 专题(弱点)Dp训练总结【状压Dp*1+区间Dp*5+数位dp*3+树型Dp*2】【10/11】
- ACM DP训练专辑
- 树DP训练专辑
- 【总结】121014DP训练
- dp训练 1005
- dp训练 1003
- dp训练 1004
- 寒假训练DP
- ACdream DP专题训练
- Oxer的dp训练
- POJ DP训练计划
- dp专题训练
- 树形dp专题训练
- 背包dp训练总结
- linux-4.9 内核 debain 8 (jessie)
- 初试docker以及搭建mysql on docker
- Hadoop Demo(一)【统计文件中单词出现的频率】
- 第一次用CSDN写博客,试试看
- ssh服务的基本用法
- DP训练 cdoj1354 柱爷很忙 [状压DP]
- Postgresql逻辑结构整理
- 算法-KMP字符串匹配算法
- Spring框架——事务管理方式搭建一个小的项目
- VMware Workstation中虚拟网络类型
- java中的继承
- 第七周——项目三— 负数把正数赶出队列
- Notepad++ lua插件开发(前传)
- 手写一个JSONP