{题解}[jzoj3853]【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
来源:互联网 发布:吉他谱大全软件下载 编辑:程序博客网 时间:2024/05/18 15:07
传送门
Analysis
怎么看都是DP
可以发现 选择移动一本书 对答案的贡献只有
1. 他本身的离开使原先不相邻者相邻
2. 它移动到”团体”中去后 不再”混乱”
于是 对于任意一本书 我们考虑往左移动 或往右移动 或不动
对于左移 考虑左边的书可能已经被移走 所以状压左边高度范围
对于右移 考虑右边有等高的书籍 预处理数组表示是否存在
Q: 右边的书移走了怎么办?
A: 麻烦自己手推一个样例。
可以考虑更改搜索顺序优化常数blablabla
Code
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define oo 2139062143using namespace std;const int N = 110, K = 110, NUM = 8 + 4,All = (1 << 8) - 1;int n,m;int a[N],tot;struct node{ int a,b;}e[N];bool aft[N],found[NUM];int f[N][N][All + 1][NUM];int main(){ scanf("%d%d", &n, &m); for (int i = 1;i <= n;i ++) scanf("%d", &a[i]), a[i] -= 25; a[0] = -1; for (int i = 1;i <= n;i ++) { if (a[i] != a[i - 1]) e[++ tot].a = a[i],e[tot].b = 1; else e[tot].b ++; } for (int i = tot;i >= 1;i --) aft[i] = found[e[i].a],found[e[i].a] = true; memset(f,127,sizeof(f)); //f[i][j][l][k] = 前i本 抽出j本 l表示前i本存在高度状态 最后一本为k f[0][0][0][8] = 0; for (int i = 0;i <= tot - 1;i ++) for (int j = 0;j <= m;j ++) for (int l = 0;l <= All;l ++) for (int k = 0;k <= 8;k ++) if (f[i][j][l][k] < oo) { int t = e[i + 1].a; f[i + 1][j][l | (1 << t)][t] = min(f[i + 1][j][l | (1 << t)][t],(t == k)?(f[i][j][l][k]):(f[i][j][l][k] + 1)); if (j + e[i + 1].b <= m) { f[i + 1][j + e[i + 1].b][l | (1 << t)][k] = min(f[i + 1][j + e[i + 1].b][l | (1 << t)][k],f[i][j][l][k] + 1); if ((l & (1 << t)) > 0) f[i + 1][j + e[i + 1].b][l][k] = min(f[i + 1][j + e[i + 1].b][l][k],f[i][j][l][k]); if (aft[i + 1]) f[i + 1][j + e[i + 1].b][l][k] = min(f[i + 1][j + e[i + 1].b][l][k],f[i][j][l][k]); } } int ans = oo; for (int i = 0;i <= m;i ++) for (int j = 0;j <= All;j ++) for (int l = 0;l <= 7;l ++) ans = min(ans,f[tot][i][j][l]); printf("%d", ans);}
1 0
- {题解}[jzoj3853]【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
- 【JZOJ3853】【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
- 【JZOJ3853】【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
- 【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
- JZOJ 3853. 【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
- 【NOIP2014八校联考第2场第2试】帮助Bsny(help)
- 【JZOJ 3853】【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help) (详解)
- 【NOIP2014八校联考第2场第2试】帮助Bsny
- 【NOIP2014八校联考第2场第2试9.28】单词接龙
- 【NOIP2014八校联考第2场第2试9.28】分组(group)
- 【JZOJ3854】【NOIP2014八校联考第2场第2试9.28】分组(group)
- 【JZOJ3852】【NOIP2014八校联考第2场第2试9.28】单词接龙(words)
- 【NOIP2014八校联考第2场第2试9.28】分组(group)
- JZOJ 3852. 【NOIP2014八校联考第2场第2试9.28】单词接龙(words)
- 【NOIP2014八校联考第2场第2试】单词接龙
- [JZOJ]3858. 【NOIP2014八校联考第3场第2试10.5】挖掘机技术哪家强
- [JZOJ]3859. 【NOIP2014八校联考第3场第2试10.5】孤独一生
- 【NOIP2014八校联考第1场第2试】大水题(water)
- Linux gdb调试
- commons-lang常用工具类StringEscapeUtils使用
- c函数之memcpy ,memset,malloc函数使用
- 欢迎使用CSDN-markdown编辑器
- pycinputbar使用说明
- {题解}[jzoj3853]【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
- 贪心 HDU 5014
- Android studio 极为常用快捷键
- http/tcp的区别
- Masonry适配——(8)UICollectionView的使用
- 安卓开源项目周报0117
- hive创建删除数据库——hive CLI方式和脚本方式
- ES 依据查询条件的增删
- Java常用设计模式(一)——工厂模式