hdu4901 背包
来源:互联网 发布:淘宝国际版开店 编辑:程序博客网 时间:2024/05/28 17:05
枚举分界线,将分界线上的元素强行划分给一边,另一边随意,然后求组合数即可。
附代码:
#include <iostream>#include <cstring>#include <cstdio>using namespace std;long long int dp[1005][1025]; //记录前i项异或结果为t的组合数long long int ddp[1005][1025]; //记录后i项与的结果为t的包含第i项的组合数long long int dpp[1005][1025]; //记录后i项与的结果为t的可包含可不包含第i项的组合数int a[1001];int n;const int mod=1000000000+7;int main(){ int T; cin>>T; while (T--) { scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); memset(ddp,0,sizeof(ddp)); memset(dpp,0,sizeof(dpp)); dpp[n][a[n]]=1; ddp[n][a[n]]=1; dp[1][a[1]]=1; for (int i=2;i<=n;i++) { dp[i][a[i]]=1; for (int t=1023;t>=0;t--) { int x=t^a[i]; dp[i][x]+=dp[i-1][t]; //用上当前项 dp[i][t]+=dp[i-1][t]; //不用当前项 dp[i][x]%=mod; dp[i][t]%=mod; } } for (int i=n-1;i>=1;i--) { dpp[i][a[i]]=1; ddp[i][a[i]]=1; for (int t=1023;t>=0;t--) { int x=t&a[i]; ddp[i][x]+=dpp[i+1][t]; //用上当前项,由前面所有组合情况推出 dpp[i][x]+=dpp[i+1][t]; //用上当前项 dpp[i][t]+=dpp[i+1][t]; //不用当前项 ddp[i][x]%=mod; dpp[i][x]%=mod; dpp[i][t]%=mod; } } long long int ans=0; for (int i=1;i<n;i++) { for (int t=0;t<=1023;t++) { ans+=dp[i][t]*ddp[i+1][t]; ans%=mod; } } cout<<ans<<endl; }}
0 0
- hdu4901 背包
- hdu4901 01背包
- HDU4901
- 【hdu4901】The Romantic Hero 背包DP…?
- hdu4901(区间DP)
- HDU4901 计数DP
- hdu4901 多校4 1005
- HDU4901 The Romantic Hero
- hdu4901 The Romantic Hero
- hdu4901-DP注意精度
- HDU4901:The Romantic Hero(DP)
- HDU4901-The Romantic Hero(DP)
- HDU4901 The Romantic Hero 计数DP
- hdu4901 The Romantic Hero 2014 Multi-University Training Contest 4
- 【背包】
- 背包
- 背包
- 背包
- 迷你播放器--第一阶段(4)--内存卡检索不到音乐的错误处理--程序内部空间管理
- [WebGL入门]九,顶点缓存的基础
- 深入Struts2配置元素
- 简单Android调用webService
- declare-styleable的使用
- hdu4901 背包
- ssh互信失败的一个解决案例
- 树的各种遍历操作(持续增加中。。。)
- 安装tftp服务器 redhat
- HDU - 1698 Just a Hook (线段树区间修改)
- 阿里云centos6.5安装nginx
- BaseAnimation是基于开源的APP,致力于收集各种动画效果(最新版本1.3)
- QoS/ToS/CoS/DSCP 介绍
- 清朝十二帝画像