2014 UESTC Training for Dynamic Programming
2014-06-02 12:00
549 查看
2ms 二维背包的解法 dp[i][VA][VB]表示考虑前i个数,当前A集合的异或和为VA,B集合的异或和为VB 转移:因为A&B=0,所以ai要么加到A集合中,要么加到B集合中,要么都不加 要求是输出集合A异或和小于集合B异或和方案书目 那么答案就是dp [i][j](i<=j)每次循环到127(二进制对应111111可能出现的最大的异或和) 空集视为一组解 那么dp[0][0][0]=1初始化 接下来只需要不断更新DP[i][j][k]即可最终输出答案 dp[i][j^src[i]][k]+=dp[i-1][j][k]; dp[i][j][k^src[i]]+=dp[i-1][j][k]; dp[i][j][k]+=dp[i-1][j][k];
#include <map>#include <set>#include <list>#include <cmath>#include<cctype>#include <ctime>#include <deque>#include <stack>#include <queue>#include <cstdio>#include <string>#include <vector>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define PI 3.1415926535897932626using namespace std;int gcd(int a, int b){return a % b == 0 ? b : gcd(b, a % b);}int dp[20][130][130];int N;bool vis[20][130][130];int src[20];int main(){while (scanf("%d",&N)!=EOF){int max=-1;memset(vis,false,sizeof(vis));memset(dp,0,sizeof(dp));for (int i=1;i<=N;i++){scanf("%d",&src[i]);}//for (int i=0;i<=N;i++)dp[i][0][0]=1;dp[0][0][0]=1;for (int i=1;i<=N;i++){for (int j=0;j<=128;j++)for (int k=0;k<=128;k++){dp[i][j^src[i]][k]+=dp[i-1][j][k];dp[i][j][k^src[i]]+=dp[i-1][j][k];dp[i][j][k]+=dp[i-1][j][k];}}int ans=0;for (int i=0;i<=128;i++)for (int j=i;j<=128;j++)ans+=dp[i][j];printf("%d\n",ans);}return 0;}
相关文章推荐
- 2014 UESTC Training for Dynamic Programming F
- 2014 UESTC Training for Dynamic Programming G
- 2014 UESTC Training for Dynamic Programming I
- 2014 UESTC Training for Dynamic Programming J
- 2014 UESTC Training for Dynamic Programming L
- 2014 UESTC Training for Dynamic Programming M
- 2016 UESTC Training for Dynamic Programming D - 柱爷的恋爱 区间dp、记忆化搜索
- UESTC_男神的礼物 2015 UESTC Training for Dynamic Programming<Problem A>
- UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic Programming<Problem B>
- 2017 UESTC Training for Dynamic Programming
- 2016 UESTC Training for Dynamic Programming F - 柱爷与三叉戟不得不说的故事 压位dp
- UESTC_酱神赏花 2015 UESTC Training for Dynamic Programming<Problem C>
- 2015 UESTC Training for Dynamic Programming J - 男神的约会(bfs)
- UESTC_最少花费 2015 UESTC Training for Dynamic Programming<Problem D>
- 2016 UESTC Training for Dynamic Programming H - 柱爷大战滑稽王 LCS转LIS
- 2015 UESTC Training for Dynamic Programming H - 邱老师选妹子(数位dp)
- UESTC_菲波拉契数制 2015 UESTC Training for Dynamic Programming<Problem E>
- 2015 UESTC Training for Dynamic Programming 男神的礼物(区间dp)
- UESTC_邱老师看电影 2015 UESTC Training for Dynamic Programming<Problem F>
- 2016 UESTC Training for Dynamic Programming J - 柱爷抢银行II dp单调队列优化