HDU 4945 2048 DP 组合
思路:
这个题写了一个背包的解法,超时了。搜了下题解才发现我根本不会做。
思路参见这个:
其实我们可以这样来考虑,求补集,用全集减掉不能组成2048的集合就是答案了。
因为只要达到2048就可以了,所以求补集会大大减小枚举的次数。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <functional>
#include <cctype>
#include <time.h> using namespace std; typedef __int64 ll; const int INF = <<;
const int MAXN = 1e5+;
const int MAXM = ;
const ll MOD = ; int cnt[MAXM];
ll dp[][MAXM];
ll fact[MAXN], inv[MAXN];
int n; ll myPow(ll x, int d) {
ll res = ;
while (d>) {
if (d&) res = (res*x)%MOD;
x = (x*x)%MOD;
d >>= ;
}
return res;
} inline ll C(int x, int y) {
return ((fact[x]*inv[y])%MOD * inv[x-y])%MOD;
} inline int lowBit(int x) {
return x&(-x);
} void solve() {
int sum = n;
for (int i = ; i < ; i++) sum -= cnt[<<i]; memset(dp, , sizeof(dp)); for (int j = min(, cnt[]); j >= ; j--) dp[][j] = C(cnt[], j); for (int i = ; i < ; i++) {
int cc = >>i;
for (int k = min(cc, cnt[<<i]); k >= ; k--) { //选k个
ll CC = C(cnt[<<i], k);
for (int j = k; j <= cc; j++) { //
dp[i][j] = (dp[i][j] + (((dp[i-][(j-k)<<]+dp[i-][(j-k)<<|])%MOD)*CC)%MOD )%MOD;
}
}
} ll ans = ((myPow(, n-sum)-dp[][])%MOD+MOD)%MOD;
ans = (ans*myPow(, sum))%MOD;
printf("%I64d\n", ans);
} int main() {
#ifdef Phantom01
freopen("HDU4945.txt", "r", stdin);
#endif //Phantom01 fact[] = ;
for (int i = ; i < MAXN; i++) fact[i] = (fact[i-]*i)%MOD;
inv[MAXN-] = myPow(fact[MAXN-], MOD-);
for (int i = MAXN-; i > ; i--) inv[i-] = (inv[i]*i)%MOD; int T = ; while (scanf("%d", &n)!=EOF && n!=) {
printf("Case #%d: ", T++);
memset(cnt, , sizeof(cnt));
int x;
for (int i = ; i < n; i++) {
scanf("%d", &x);
cnt[x]++;
}
solve();
} return ;
}
HDU 4945 2048 DP 组合的更多相关文章
- HDU 4945 2048(DP)
HDU 4945 2048 题目链接 题意:给定一个序列,求有多少个子序列能合成2048 思路:把2,4,8..2048这些数字拿出来考虑就能够了,其它数字不管怎样都不能參与组成.那么在这些数字基础上 ...
- hdu 4945 2048 (dp+组合的数目)
2048 Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- HDU 4945 2048(dp)
题意:给n(n<=100,000)个数,0<=a[i]<=2048 .一个好的集合要满足,集合内的数可以根据2048的合并规则合并成2048 .输出好的集合的个数%998244353 ...
- HDU 4945 (dp+组合数学)
2048 Problem Description Teacher Mai is addicted to game 2048. But finally he finds it's too hard to ...
- hdu 4123 树形DP+RMQ
http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...
- hdu 4507 数位dp(求和,求平方和)
http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依旧单身! 吉哥依旧单身! DS级码农吉哥依旧单身! 所以 ...
- hdu 3709 数字dp(小思)
http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negati ...
- hdu 4352 数位dp + 状态压缩
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 4283 区间dp
You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
随机推荐
- JS table分页
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="paging3.aspx.c ...
- Java web课程学习之JSP
JSP jsp隐式对象:JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. jsp脚本片段 l jsp脚本片段是指 ...
- 四、分布式 Git(未完待续)
一.分布式工作流程 在 Git 中,每个开发者同时扮演着节点和集线器的角色——也就是说,每个开发者既可以将自己的代码贡献到其他的仓库中,同时也能维护自己的公开仓库,让其他人可以在其基础上工作并贡献代码 ...
- selenium chrome.options禁止加载图片和js
#新建一个选项卡 from selenium import webdriver options = webdriver.ChromeOptions() #禁止加载图片 prefs = { 'profi ...
- 移动端ios兼容问题
IOS系统bug: 1)input无法输入的问题: -webkit-user-select:none;改成-webkit-user-select:auto: 2)滚动不流畅(overflow-y:au ...
- Android应用常规开发技巧——善用组件生命周期
数据管理 对于仅仅读数据.一种经常使用的管理模式是在onCreate函数中进行数据的载入,直到组件的onDestory函数被调用时在进行释放. // 缓存仅仅读的数据 private Object r ...
- [CSS3] Create Dynamic Styles with CSS Variables
In this lesson we are going to use CSS variables to keep our application's colors consistent. This i ...
- UESTC 1143 数据传输 网络流 最大流 Dinic
数据传输 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- HDU 5353 Average
Problem Description There are n soda sitting around a round table. soda are numbered from 1 to n and ...
- 具体解释XML解析(一)—解析接口浅析
在DRP项目中接触到了一个XML解析工具DOM4J,它作为解析工具的据说性能很优秀.可是刚刚接触解析工具不久,而且也没有使用过其它的解析工具.因此对于DOM4J的性能没有直接的感受(没有參照物).只是 ...