HDU 5119 Happy Matt Friends(DP)
2015-08-31 21:36
513 查看
求解方案数的简单DP,比赛时没有往DP上想,思维比较局限。
状态转移很好写,类似于背包,我用记忆化搜索写的容易写,但是效率比较低,还占内存,读者可以改成递推式,还可以改成滚动数组,因为每一层的状态只用到它上一层的状态 。
细节参见代码:
状态转移很好写,类似于背包,我用记忆化搜索写的容易写,但是效率比较低,还占内存,读者可以改成递推式,还可以改成滚动数组,因为每一层的状态只用到它上一层的状态 。
细节参见代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<list> #include<cmath> #include<set> #include<queue> using namespace std; typedef long long ll; const int INF = 100000000; const long long maxn = 100 + 5; int T,n,m,kase = 0,vis[41][(1<<20)+5],a[maxn]; ll d[41][(1<<20)+5]; ll dp(int i,int j) { if(i == n+1 && j >= m) return 1; if(i == n+1 && j < m) return 0; ll& ans = d[i][j]; if(vis[i][j] == kase) return ans; vis[i][j] = kase; ans = 0; ans = dp(i+1,j^a[i]) + dp(i+1,j); return ans; } int main() { scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); ++kase; printf("Case #%d: %I64d\n",kase,dp(1,0)); } return 0; }
相关文章推荐
- FrameLayout的使用——android开发之xml布局文件
- android传递数据方式3--通过剪切板传类
- NSMutableString可变字符串的定义及常用方法
- android:layout_weight属性的工作原理
- IOS--Swift 01
- 如何调试Android中的Sqlite数据
- android传递数据方式2--通过剪切板传数据
- xml文件解析并显示到Android手机 spinner的应用
- iOS:音频
- Android 笔记 5
- Android之项目中如何用好构建神器Gradle?
- Android-调用本地方法将小写字符串转成大写字符串/NDK-JNI开发实例(四)
- Android studio入门
- Android——Day8.31
- android做新闻客户端用到得第三包
- Android的Activity跳转动画各种效果整理
- iOS --- 通过CoreImage实现的简单滤镜效果
- Unity 静态构造函数特殊使用
- Android - 卡片式布局 Fragment 详细回顾(一)
- android中Fragment和Actvity相互跳转