Codeforces 607 D Zuma
2016-01-15 19:46
295 查看
题目传送门:
http://codeforces.com/contest/607/problem/B
祖玛游戏,区间dp,用记忆化搜索再加上传引用去写逼格更高一些
想清楚终止条件即2个球和1个球时的方案即可
code:
http://codeforces.com/contest/607/problem/B
祖玛游戏,区间dp,用记忆化搜索再加上传引用去写逼格更高一些
想清楚终止条件即2个球和1个球时的方案即可
code:
[code]#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<queue> #include<math.h> #include<stdlib.h> #include<vector> #include<map> #include<string> using namespace std; #define ll long long #define For(i,n) for(int i=1;i<=n;i++) #define Dor(i,n) for(int i=n;i>=1;i--) #define s(n) scanf("%d",&n) #define p(n) printf("%d\n",n) #define ms(n) memset(n,0,sizeof(n)) #define lson l , m , rt << 1 #define rson m + 1 , r , rt << 1 | 1 const double eps=1e-8; const int inf=0x3f3f3f3f; const int maxn=1e5+10; int n, a[505]; int dp[505][505]; int dfs(int l,int r) { int &ans=dp[l][r]; if(ans!=inf) return ans; if(r==l) return ans=1; if(r-l==1) { if(a[l]==a[r]) return ans=1; else return ans=2; } //it should not return directly because the current solution may not be most perfect if(a[l]==a[r]) ans=dfs(l+1,r-1); for(int i=l;i<r;i++) { ans=min(ans,dfs(l,i)+dfs(i+1,r)); } return ans; } int main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dp[i][j]=inf; for(int i=1;i<=n;i++) { s(a[i]); } printf("%d\n",dfs(1,n)); return 0; }
相关文章推荐
- linux 文件查找
- 存储地址空间结构_20160114
- Java军事卫星拓扑图MilitaryDemo
- easyui datagrid 表格组件列属性formatter和styler使用方法
- android锁屏分析
- 重新创建Activity
- linux服务器 磁盘和文件系统管理(四) 磁盘配额管理与实例
- 定点数的表示
- 005-httpd基础配置
- git reset
- VMWare WorkStation 10/11/12 for Windows10解决虚拟机无法上网的问题
- [POJ 2184]Cow Exhibition[DP][01背包]
- 51单片机的物理存储地址_20160112
- MVC中页面传值方式总结
- Python MySQL API
- Java中的sun.misc.Unsafe包
- VirtualBox安装
- linux搭建git服务器
- 在创建线程时,必须要建立一个Thread类的或其子类的实例
- 通过adb命令向Android模拟器中导入通讯录联系人