hdu4028 离散DP
2011-09-17 10:32
169 查看
以后一定要每天都写报告
题意:40个数,选出几个,使其lcm大于等于m,计数DP, map
题意:40个数,选出几个,使其lcm大于等于m,计数DP, map
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <map> #define inf (1 << 30) const double eps = 1e-12; const double pi = acos(-1.0); using namespace std; int T; __int64 n, m; map<__int64, __int64> dp[41]; map<__int64, __int64> :: iterator iter; __int64 gcd(__int64 a, __int64 b) { return a % b ? gcd(b, a % b) : b; } __int64 lcm(__int64 a, __int64 b) { return a * b / gcd(a, b); } int solve() { int i; __int64 first, second, t1; //dp[1].insert(make_pair(1, 1)); dp[1][1] = 1; for (i = 2; i <= 40; i++) { dp[i] = dp[i - 1]; dp[i][i]++; for (iter = dp[i - 1].begin(); iter != dp[i - 1].end(); iter++) { first = iter -> first, second = iter -> second; t1 = lcm(first, i); dp[i][t1] += second; } } return 1; } int main() { int i, j, h; __int64 ans, first, second; solve(); scanf("%d", &T); for (h = 1; h <= T; h++) { scanf("%I64d%I64d", &n, &m); printf("Case #%d: ", h); ans = 0; for (iter = dp .begin(); iter != dp .end(); iter++) { first = iter -> first, second = iter -> second; if (first >= m) ans += second; } printf("%I64d\n", ans); } system("pause"); return 0; }
相关文章推荐
- hdu4028 The time of a day (map+dp)
- hdoj4028(离散DP)
- oldssoj2674Delicious Apples(离散+贪心+环上折半dp)
- 对于一类离散的概率DP问题的总结(第一次)
- hdoj 4028(离散DP)
- UVA11021 Tribles[离散概率 DP]
- Codeforces 567C Geometric Progression (离散 + DP)
- NOIP模拟题 [递推][优化][dp][线段树][离散]
- hdu4028 The time of a day[map优化dp]
- HDU 4028 The time of a day (数论,离散DP)
- POJ3666 离散化的dp
- hdu 4028 2011上海赛区网络赛H dp+map离散
- poj3666(离散思想,lis,dp)
- srm 308 div2 1000(DP, 离散背包+连续背包)
- hdu1421搬寝室(dp)
- 《训练指南》DP::beginner解题报告
- hdu 2167(状压dp)
- UVA 1025 A Spy in the Metro DP
- 递推DP URAL 1167 Bicolored Horses
- POJ 3017 Cut the Sequence (单调队列优化DP)