您的位置:首页 > 其它

hacker cup 2015 Round 1 解题报告

2015-01-21 22:16 232 查看
A:求区间内素因子个数等于n的数有多少个

解题思路:筛法

解题代码:

// File Name: c.cpp
// Author: darkdream
// Created Time: 2015年01月18日 星期日 15时19分10秒

#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#define LL long long
#define M 1000000007
using namespace std;
LL dp[4005][2005];
int main(){
int T ;
//freopen("out","w",stdout);
scanf("%d",&T);
for(int ca = 1; ca <= T ; ca ++)
{
int n , m;
scanf("%d-%d",&n,&m);
//printf("%d %d\n",n,m);
int t = n + m;
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
dp[1][1] = 1;
for(int i = 2;i <= t;i ++)
for(int j = 0 ;j <= n ;j ++)
{
if(i - j < j)
{
if((i - 1) - j < j)
dp[i][j] = (dp[i][j] + dp[i-1][j])%M;
if((i-1) - (j-1) < (j-1))
dp[i][j] =(dp[i][j] + dp[i-1][j-1])% M;
}
}
printf("Case #%d: %lld ",ca,dp[t]
);
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
dp[1][1] = 1;
LL sum =0 ;
for(int i = 2;i <= m+m;i ++)
for(int j = 0 ;j <= m ;j ++)
{
if(i - j < j)
{
if((i - 1) - j < j)
dp[i][j] = (dp[i][j] + dp[i-1][j])%M;
if((i-1) - (j-1) < (j-1))
dp[i][j] =(dp[i][j] + dp[i-1][j-1])% M;
}
}
for(int i = m;i <= (m == 0?0:m+m-1);i ++)
sum = (sum+dp[i][m])%M;
printf("%lld\n",sum);
}

return 0;
}


View Code
D:树形DP,颜色数最多为logn 也就是最多13种颜色
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: