BestCoder Round #78 CA Loves GCD
2016-04-02 21:25
295 查看
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=5655代码
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <map> #include <vector> using namespace std; int T; long long a[4]; int main() { scanf("%d",&T); while(T --) { scanf("%I64d%I64d%I64d%I64d",&a[0],&a[1],&a[2],&a[3]); sort(a,a + 4); bool ok = true; if(a[0] <= 0) ok = false; if(a[0] <= a[3] - a[1] - a[2]) ok = false; if(ok) puts("Yes"); else puts("No"); } }
题目 CA Loves GCD
http://acm.hdu.edu.cn/showproblem.php?pid=5656问题描述
CA喜欢是一个热爱党和人民的优秀同♂志,所以他也非常喜欢GCD(请在输入法中输入GCD得到CA喜欢GCD的原因)。现在他有N个不同的数,每次他会从中选出若干个(至少一个数),求出所有数的GCD然后放回去。
为了使自己不会无聊,CA会把每种不同的选法都选一遍,CA想知道他得到的所有GCD的和是多少。
我们认为两种选法不同,当且仅当有一个数在其中一种选法中被选中了,而在另外一种选法中没有被选中。
输入描述
第一行 TT,表示有 TT 组数据。接下来TT组数据,每组数据第一行一个整数NN,表示CA的数的个数,接下来一行NN个整数AiAi表示CA的每个数。1≤T≤50, 1≤N≤1000, 1≤Ai≤10001≤T≤50,1≤N≤1000,1≤Ai≤1000接下来 TT 组数据,每组数据第一行一个整数 NN,表示CA的数的个数,接下来一行 NN 个整数 A_iA
i
表示CA的每个数。
1 \le T \le 50,~1 \le N \le 1000,~1 \le A_i \le 10001≤T≤50, 1≤N≤1000, 1≤A
i
≤1000
输出描述
对于每组数据输出一行一个整数表示CA所有的选法的GCD的和对 100000007100000007 取模的结果。输入样例
22
2 4
3
1 2 3
输出样例
810
思路
dp[i][j] 表示用前i个数字凑成gcd=j的所有可能。如果使用了第a[i + 1] 那么,dp[i + 1][gcd(j,a[i + 1])] += dp[i][j]; 否则dp[i + 1][j] += dp[i][j];
代码
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; int T; int n; const int MAXN = 1005; int a[MAXN]; int dp[MAXN][MAXN]; int GCD[MAXN][MAXN]; int gcd(int x,int y) { if(x == 0) return y; return gcd(y % x,x); } const int MOD = 100000007; int main() { for (int i = 0;i <= 1000;i ++) { for (int j = 0;j <= 1000;j ++) { GCD[i][j] = gcd(i,j); } } scanf("%d",&T); while(T --) { memset(dp,0,sizeof(dp)); scanf("%d",&n); int maxs = 0; for (int i = 1;i <= n;i ++) { scanf("%d",&a[i]); maxs = max(maxs,a[i]); } dp[0][0] = 1; for (int i = 0;i + 1 <= n;i ++) { for (int j = 0;j <= maxs;j ++) { (dp[i + 1][j] += dp[i][j]) %= MOD; (dp[i + 1][GCD[j][a[i + 1]]] += dp[i][j]) %= MOD; } } int ret = 0; for (int i = 0;i <= 1000;i ++) { ret = (ret + ((long long)dp [i]) * i % MOD) % MOD; } printf("%d\n",ret); } }
相关文章推荐
- 由Android 65K方法数限制引发的思考
- 代理模式
- jar命令成功完成 java -jar 命令却提示“没有主清单属性”!
- C++内存分配
- AR增强现实专用汉明码生成器+JAVA核心代码+程序
- Akka并发编程——第四节:Actor模型(三)
- 去除Spring tool suite/myeclipse/eclipse项目上有个红色感叹号
- 腾讯2016年实习生招聘笔试题
- Tuxedo介绍
- Xamarin 使用经验-字符集及动态编译
- HDU5656 CA Loves GCD (BC)
- Java通过代理server上网
- 教你在ubuntu下使用labview
- Android AndroidManifest.xml 详解
- Vrituoso安装经验总结
- Eclipse中的快捷键
- Java SE学习之printf 日期转换符
- MyBatis Spring整合配置映射接口类与映射xml文件
- 《Linux内核分析》第六周学习小结
- linux信号详解