HDU 5656 CA Loves GCD dp
2016-04-03 22:10
351 查看
CA Loves GCD
题目连接:
http://acm.hdu.edu.cn/showproblem.php?pid=5656Description
CA is a fine comrade who loves the party and people; inevitably she loves GCD (greatest common divisor) too.Now, there are N different numbers. Each time, CA will select several numbers (at least one), and find the GCD of these numbers. In order to have fun, CA will try every selection. After that, she wants to know the sum of all GCDs.
If and only if there is a number exists in a selection, but does not exist in another one, we think these two selections are different from each other.
Input
First line contains T denoting the number of testcases.T testcases follow. Each testcase contains a integer in the first time, denoting N, the number of the numbers CA have. The second line is N numbers.
We guarantee that all numbers in the test are in the range [1,1000].
1≤T≤50
Output
T lines, each line prints the sum of GCDs mod 100000007.Sample Input
22
2 4
3
1 2 3
Sample Output
810
Hint
题意
给n个数,然后你可以选择若干个数出来,然后求他的gcd然后现在让你遍历所有的方案,问你所有方案的和是多少
题解:
dp[i][j]表示现在选了i个数,gcd为j的方案数dp[i][j]->dp[i+1][j],dp[i+1][gcd(a[i+1],j)]
然后不停转移就好了
代码
#include<bits/stdc++.h> using namespace std; const int maxn = 1050; const int mod = 100000007; int dp[maxn][maxn],a[maxn],n; long long ans; int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } void solve() { memset(dp,0,sizeof(dp));dp[0][0]=1;ans=0; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) for(int j=0;j<maxn;j++)if(dp[i][j]) { (dp[i+1][j]+=dp[i][j])%=mod; (dp[i+1][gcd(j,a[i+1])]+=dp[i][j])%=mod; } for(int i=1;i<maxn;i++) (ans+=1ll*i*dp [i]%mod)%=mod; printf("%d\n",ans); } int main() { int t;scanf("%d",&t); while(t--)solve(); }
相关文章推荐
- 20145235 《Java程序设计》第5周学习总结
- 第一次
- 函数库【收集中】
- oj问题一-结构体---学生信息排序
- SSH框架整合demo
- Gym 100942A Three seamarks
- cmake链接MySQL分析
- linux下core文件调试方法
- JVM-class文件完全解析-字段表集合
- 在windows下使用postgreSQL导入tpch的数据表
- 在路上, 英语
- Java的Integer缓存
- 在centos6 或 RHEL 6上使用yum测试zabbix 2.4
- JavaScript的函数
- bzoj 1977: [BeiJing2010组队]次小生成树 Tree
- DuiLib(5)——CWindowWnd窗口函数简介
- 1041. 考试座位号(15)
- 第五次作业
- Parsing XML in Python&Assignment
- Android系统的4种Service详解