HDU 5656 CA Loves GCD 01背包+gcd
题目链接:
hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5656
bc:http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=683&pid=1002
CA Loves GCD
Accepts: 64 Submissions: 535
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
问题描述
CA喜欢是一个热爱党和人民的优秀同♂志,所以他也非常喜欢GCD(请在输入法中输入GCD得到CA喜欢GCD的原因)。
现在他有N个不同的数,每次他会从中选出若干个(至少一个数),求出所有数的GCD然后放回去。
为了使自己不会无聊,CA会把每种不同的选法都选一遍,CA想知道他得到的所有GCD的和是多少。
我们认为两种选法不同,当且仅当有一个数在其中一种选法中被选中了,而在另外一种选法中没有被选中。
输入描述
第一行TT,表示有TT组数据。
接下来TT组数据,每组数据第一行一个整数NN,表示CA的数的个数,接下来一行NN个整数A_iAi表示CA的每个数。
1 \le T \le 50,~1 \le N \le 1000,~1 \le A_i \le 10001≤T≤50, 1≤N≤1000, 1≤Ai≤1000
输出描述
对于每组数据输出一行一个整数表示CA所有的选法的GCD的和对100000007100000007取模的结果。
输入样例
2
2
2 4
3
1 2 3
输出样例
8
10
题解:
可以建模为01背包的模型。
dp[i][j]表示前i个数的任意组合中gcd等于j的组合数。
转移方程有:(刷表法)
第i个数不取:dp[i][j]+=dp[i-1][j];
第i个数要取:dp[i][gcd(a[i],j)]+=dp[i-1][j];
可以离线处理出1000以内任意两个数的gcd值,否则会超时,当然也可以通过减枝来降低时间复杂度(如果dp[i-1][j]=0,就没必要算gcd(a[i],j)了)。
初始化有dp[0][0]=1(一个数都没有,则有gcd为0)
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; typedef long long LL;
const int maxn = + ;
const int mod = 1e8 + ;//这里不要写成1e9+7!!!! int n;
int a[maxn], dp[maxn][maxn];
int g[maxn][maxn]; int gcd(int a, int b) {
return b == ? a : gcd(b, a%b);
} void get_g() {
for (int i = ; i <= ; i++) {
for (int j = i; j <= ; j++) {
g[i][j] = g[j][i] = gcd(i, j);
}
}
} void init() {
memset(dp, , sizeof(dp));
} int main() {
get_g();
int tc;
scanf("%d", &tc);
while (tc--) {
init();
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", a + i);
}
dp[][] = ;
for (int i = ; i <= n; i++) {
for (int j = ; j <= ; j++) {
dp[i][j] += dp[i - ][j]; dp[i][j] %= mod; int tmp = g[a[i]][j];
dp[i][tmp] += dp[i - ][j]; dp[i][tmp] %= mod;
}
}
LL ans = ;
for (int i = ; i <= ; i++) {
ans += (LL)dp[n][i] * i;
ans %= mod;
}
printf("%lld\n", ans);
}
return ;
}
HDU 5656 CA Loves GCD 01背包+gcd的更多相关文章
- hdu 5656 CA Loves GCD(n个任选k个的最大公约数和)
CA Loves GCD Accepts: 64 Submissions: 535 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 2 ...
- HDU 5656 CA Loves GCD dp
CA Loves GCD 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5656 Description CA is a fine comrade w ...
- HDU 5656 CA Loves GCD (数论DP)
CA Loves GCD 题目链接: http://acm.hust.edu.cn/vjudge/contest/123316#problem/B Description CA is a fine c ...
- 数学(GCD,计数原理)HDU 5656 CA Loves GCD
CA Loves GCD Accepts: 135 Submissions: 586 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 2621 ...
- HDU 5656 ——CA Loves GCD——————【dp】
CA Loves GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- hdu 5656 CA Loves GCD
CA Loves GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- hdu 5656 CA Loves GCD(dp)
题目的意思就是: n个数,求n个数所有子集的最大公约数之和. 第一种方法: 枚举子集,求每一种子集的gcd之和,n=1000,复杂度O(2^n). 谁去用? 所以只能优化! 题目中有很重要的一句话! ...
- HDU 5656 CA Loves GCD (容斥)
题意:给定一个数组,每次他会从中选出若干个(至少一个数),求出所有数的GCD然后放回去,为了使自己不会无聊,会把每种不同的选法都选一遍,想知道他得到的所有GCD的和是多少. 析:枚举gcd,然后求每个 ...
- HDU 5655 CA Loves Stick 水题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5656 CA Loves Stick Accepts: 381 Submissions: 3204 ...
随机推荐
- PHP打包zip并下载
$file_template = FCPATH.'canddata/cand_picture.zip';//在此之前你的项目目录中必须新建一个空的zip包(必须存在) $downname = $car ...
- oracle相关操作,存储、临时表空间、用户操作、启动过程
表空间:此空间是用来进行数据存储的(表.function.存储过程等),所以是实际物理存储区域.临时表空间:主要用途是在数据库进行排序运算[如创建索引.order by及group by.distin ...
- React 组件间通信
https://jsfiddle.net/69z2wepo/9719/ <script src="https://facebook.github.io/react/js/jsfiddl ...
- week14课上测试
说明 本次测试老师将所有课下测试的易错题全部重新考察了一遍,虽然是第二次做,还提前复习过,还是错了很多,回到寝室发现老师还没有结束测试,43分的我又忍不住再做了一遍. 做第二遍发现了有几个题目是蓝墨云 ...
- WPF MVVM从入门到精通5:PasswordBox的绑定
原文:WPF MVVM从入门到精通5:PasswordBox的绑定 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通 ...
- Dlib库中实现正脸人脸检测的测试代码
Dlib库中提供了正脸人脸检测的接口,这里参考dlib/examples/face_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸检测的测试代码,测试代码如下: #i ...
- Python socket网络模块
一.基于TCP协议的socket通信 以打电话为理解方式进行TCP的通信. Server端代码: import socket phone = socket.socket(socket.AF_INET, ...
- 自己用C语言写RL78 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 之前用C实现过多款PI ...
- Drupal7 针对特定条件才显示区块
当D7中开启PHP filter模块. Text format就会多出“PHP Code”选项. 而且,新建block时也会多出"Pages on which PHP code return ...
- Angular开发者手册重点翻译之指令(一)
创建自定义的指令 这个文章将解释什么需要在自己的angularjs应用中创建自己的指令,以及如何实现它. 什么是指令 在高的层面上讲,指令是DOM元素中的标记(例如一个属性,一个节点名,注释或者CSS ...