博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HAOI2016]字符合并
阅读量:5132 次
发布时间:2019-06-13

本文共 956 字,大约阅读时间需要 3 分钟。

5cd1836b5b165.png

很容易想到直接DP,关键是枚举顺序。

\(1.\)设后一段构成最后一个点,前一段构成前面的点,那么能得到\(1\)个点的数量要求 : \(1,k,2k-1...\)相差\(k-1\),所以能够剩下的位数是在模\(K-1\)意义下的
\(2.\)因为实质是从里面转移到外面,注意循环的正逆顺序 : \(mid\)\(j\)小 , 正序枚举\(j\) ; \(mid\)\(i\)大 , 倒序枚举\(i\)

具体细节见代码

#include
#include
#include
#include
#define debug(...) fprintf(stderr,__VA_ARGS__)#define Debug(x) cout<<#x<<"="<
<
57){if(c=='-')f=-1;c=getchar();} while(c>=48&&c<=57)x=(x<<3)+(x<<1)+(c&15),c=getchar(); return f*x;}int f[305][305][305],g[2],c[305],w[305],a[305];int n,K,ans=-INF;signed main(){ n=read(),K=read(); for(int i=1;i<=n;i++) a[i]=read(); for(int i=0;i<(1<
=1;i--) for(int j=i;j<=n;j++){ //注意循环的正逆顺序:mid比j小,正序枚举j;mid比i大,倒序枚举i if(i==j){f[i][j][a[i]]=0;continue;} int len=j-i;//前一段得到的长度 len%=K-1; if(!len) len=K-1; for(int mid=j;mid>i;mid-=K-1)//能够得到1位的位数相差K-1 for(int op=0;op<(1<

转载于:https://www.cnblogs.com/lizehon/p/10828127.html

你可能感兴趣的文章
用户权限设置
查看>>
java 之equals与"=="的区别
查看>>
LinkedList<E>源码分析
查看>>
学习微软 Excel 2002 VBA 编程和XML,ASP技术
查看>>
游戏开发常用算法
查看>>
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Intellij IDEA(eclipse设置)常用快捷键
查看>>
learning express step(五)
查看>>
推荐2013年最新的10款jquery插件
查看>>
推荐十款来自极客标签的超棒前端特效[第十一期]
查看>>
51 nod 1624 取余最长路 思路:前缀和 + STL(set)二分查找
查看>>
c# linq <未完>
查看>>
模型选择评估方法
查看>>
Beta 冲刺(4/7)
查看>>
Spring 配置相关
查看>>
深入理解Java:注解(Annotation)基本概念
查看>>
NAT基本原理
查看>>
Java Content Repository API 简介 转自(https://www.ibm.com/developerworks/cn/java/j-jcr/)
查看>>
visio二次开发——图纸解析
查看>>