hihoCoder 1096 Divided Product 微软苏州校招笔试 12月27日

来源:互联网 发布:ubuntu 16.04 unity 编辑:程序博客网 时间:2024/04/29 10:06

这一题的Tag是DP额。。居然用dfs过了。。是数据水了咩(⊙o⊙)…

dfs的方法和枚举组合结果的方法很像。dfs(now,remain,product),now是当前枚举的数的下界(也可以理解成当前位置的前一个数),因为A1~Ak是升序,所以当前位置只要从now往remain枚举即可,remain是当前的数列和还差多少到N。注意乘积product会爆int,要用long long。

#include<iostream>#include<stdio.h>#include<cstdio>#include<stdlib.h>#include<vector>#include<string>#include<cstring>#include<cmath>#include<algorithm>#include<stack>#include<queue>#include<ctype.h>#include<map>#include<time.h>#include<bitset>#include<set>#include<list>using namespace std;//hihocoder 1096 const long long mod=1000000007; int N; int M; long long ans; void dfs(int now,int remain,long long product)//用int product中途乘积可能会溢出 {    if(remain==0)    {        if(product%M==0)        {            ans++;            ans=ans%mod;        }    }    for(int i=now;i<=remain;i++)    {        dfs(i+1,remain-i,product*i);    } }int main(){   // freopen("input.txt","r",stdin);    scanf("%d %d",&N,&M);    dfs(1,N,1);    printf("%d\n",ans);    return 0;}


0 0
原创粉丝点击