Ant Counting POJ - 3046 多重组合数
2017-05-10 01:27
465 查看
题意:就是有t(t<1,000)种蚂蚁,然后每种有ni个(n<100),a为所有蚂蚁的数量,然后给你一个范围,s,b(0< s<=b<=a),问你在这个范围内一共有多少种组合方式
模板题感觉
公式还是之前那个多重组合数,然后因为用二维数组会超空间,然后就用了滚动数组,用位运算果然比我自己用模2的速度快还美观。。。
模板题感觉
公式还是之前那个多重组合数,然后因为用二维数组会超空间,然后就用了滚动数组,用位运算果然比我自己用模2的速度快还美观。。。
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <cmath> using namespace std; const int maxn =1005; int k[maxn]; int dp[5][maxn*100]; const int gg=1e6; int main() { int t,a,s,b; scanf("%d %d %d %d",&t,&a,&s,&b); for(int i=0;i<a;i++) { int c; scanf("%d",&c); k[c]++; } dp[1][0]=1; dp[0][0]=1; for(int i=1;i<=t;i++) { int x=i&1,y=x^1;// dp[x][0]=1; for(int j=1;j<=a;j++) { if(j>k[i]) dp[x][j]=(dp[x][j-1]+dp[y][j]-dp[y][j-k[i]-1]+gg)%gg; else dp[x][j]=(dp[y][j]+dp[x][j-1])%gg; } } int ans=0; for(int i=s;i<=b;i++) { ans=(ans+dp[t&1][i])%gg; } printf("%d\n",ans); return 0; }
相关文章推荐
- Ant Counting POJ - 3046 多重组合数
- Ant Counting POJ - 3046 多重组合数
- Ant Counting POJ - 3046 多重组合数
- Ant Counting POJ - 3046 多重组合数
- Ant Counting POJ - 3046 多重组合数
- Ant Counting POJ - 3046 多重组合数
- Ant Counting POJ - 3046 多重组合数
- poj 3046 Ant Counting dp 优化
- POJ_3046_Ant_Counting_(动态规划,多重集组合数)
- poj 3046 Ant Counting
- POJ 3046 Ant Counting——多重集组合数
- POJ 3046 Ant Counting dp
- 刷题——Ant Counting POJ - 3046
- Ant Counting POJ - 3046 多重集组合数
- POJ 2282 The Counting Problem,组合数学
- POJ 2282-The Counting Problem(组合数学_区间计数)
- POJ 3046---Ant Counting(多重组合数)
- POJ 3046 Ant Counting(多重集组合数)(基础组合dp)
- Ant Counting POJ-2437
- poj2249 Binomial Showdown 求组合数