hdoj4028(离散DP)
2011-09-12 15:53
197 查看
1.思路
N数据范围小
先做预处理将1至40的数据打表出来!
DP方程:
dp[i]=dp[i-1]//继承
dp[i][j]=d[i][j]+dp[i-1][k] ,j=lcm(i,k) j是i和k的最小公倍数
dp[i][j]的含义是前i根针的组合中最小公倍数为j的数量,其实输出案例1023就提示我们应该这样做了。
逐步迭代加入新的针组成更大的集合。
因为最小公倍数的要求>=M,范围很大,因此这里要离散不能用普通的数组,第二维可以用map可以完美解决,当时就是没想到这里,哎!
参考:http://www.cnblogs.com/Fatedayt/archive/2011/09/10/2173352.html
2.代码
N数据范围小
先做预处理将1至40的数据打表出来!
DP方程:
dp[i]=dp[i-1]//继承
dp[i][j]=d[i][j]+dp[i-1][k] ,j=lcm(i,k) j是i和k的最小公倍数
dp[i][j]的含义是前i根针的组合中最小公倍数为j的数量,其实输出案例1023就提示我们应该这样做了。
逐步迭代加入新的针组成更大的集合。
因为最小公倍数的要求>=M,范围很大,因此这里要离散不能用普通的数组,第二维可以用map可以完美解决,当时就是没想到这里,哎!
参考:http://www.cnblogs.com/Fatedayt/archive/2011/09/10/2173352.html
2.代码
#pragma warning(disable : 4786) #include <iostream> #include<algorithm> #include<cstdio> #include<map> #include<string> using namespace std; #define LL __int64 map<LL,LL> dp[45]; inline LL gcd(LL a, LL b){LL t;while(b){t = b;b =a%b;a=t;}return a;} inline LL lcm(LL a,LL b){return a/gcd(a,b)*b;} void prepare() { dp[0][1]=1; for(int i=1;i<=40;i++) { dp[i]=dp[i-1]; for(map<LL,LL>::iterator it=dp[i-1].begin();it!=dp[i-1].end();it++) { dp[i][lcm(it->first,i)]+=it->second; } } } int main() { prepare(); #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); //freopen("data.out","w",stdout); #endif int cases; cin>>cases; int i=1; while(cases--) { int n; LL m; scanf("%d%I64d",&n,&m); LL ans=0; for(map<LL,LL>::iterator it=dp .begin();it!=dp .end();it++) { if(it->first>=m)ans+=it->second; } if(m==1)ans--; printf("Case #%d: %I64d\n",i++,ans); } return 0; }
相关文章推荐
- hdoj 4028(离散DP)
- hdu 4028 2011上海赛区网络赛H dp+map离散
- hdoj 2391 Filthy Rich 【DP】
- hdoj 5074 Hatsune Miku 【DP】
- hdoj 2829 Lawrence 四边形不等式优化dp
- HDOJ题目4003 Find Metal Mineral(树状dp)
- hdoj 4939 Stupid Tower Defense 【DP】
- hdoj 4405 Aeroplane chess(概率dp)
- HDOJ 3944 DP?
- HDOJ题目1011 Starship Troopers(树状dp)
- (DP)FatMouse's Speed --HDOJ
- hdoj 1864 最大报销额 【DP】【01背包】【水】
- 【DP】 HDOJ 5370 Tree Maker
- HDOJ 5335 Walk Out 【bfs 贪心 斜行dp】
- hdoj 1723(64位dp)(非记忆式)(当m==0,n==1的时候为1)
- hdoj MAX Average Problem 2993 (斜率优化DP)
- HDOJ 4552 怪盗基德的挑战书(KMP+DP,不懂)
- HDOJ 4529 - N骑士问题 DP
- hdoj 1260 Tickets【dp】
- HDOJ-2825 AC自动机DP+位运算..