sdut1309 不老的传说问题(区间dp)
2016-02-25 15:16
393 查看
sdut1309
分析
类似于hdu4283,可以做完那道题再来试试,这道题的不同就是有刷的长度限制,那么在更新的时候要判断一下是不是符合长度,而且这道题刷的石头连成一个环,那么就整体往后复制,最后判断 ans=min(ans,dp[i][i+n-1]);即可。题目
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1309代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,c,k; int dp[410][410]; int a[410]; int main() { while(scanf("%d %d %d",&n,&c,&k)!=EOF) { for(int i=1; i<=n; i++) { scanf("%d",&a[i]); a[n+i]=a[i]; } for(int i=1; i<=2*n; i++) for(int j=i+1; j<=2*n; j++) dp[i][j]=0x3f3f3f3f; for(int i=1; i<=2*n; i++) dp[i][i]=1; for(int len=2;len<=n;len++) { for(int i=1;i+len-1<=2*n;i++) { int j=i+len-1; if(j-i+1<=k) dp[i][j]=dp[i+1][j]+1; int t=min(i+k-1,j); for(int k=i+1;k<=t;k++) if(a[i]==a[k]) dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]); } } int ans=0x3f3f3f3f; for(int i=1;i<=n;i++) ans=min(ans,dp[i][i+n-1]); printf("%d\n",ans); } return 0; }
相关文章推荐
- 减少js对性能的影响
- Android 获取当前网速质量调整网络请求
- 图像文件读写时报错、“com.sun.image.codec.jpeg不存在”
- java设计模式:动态代理模式 Proxy
- hadoop中namenode中的edit.log文件查看
- Android安全机制分析与解决方案探析
- backbone如何快捷获取view中el
- 将form表单元素转为实体对象 或集合 -ASP.NET C#
- 从源代码安装Guidance
- 高可用测试oracle
- 提高代码质量:如何编写函数
- Hibernate实现跨库操作的解决方式
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- 北京最牛的医院 最牛的科室排名出炉
- 第一篇测试文章
- OpenGL问题拾遗
- SDWebImage原理及使用
- spring加密properties文件
- 毕业设计
- Android - View绘图原理总结