Toj 3208 Cow Frisbee Team
2014-05-25 13:55
190 查看
题目标签:dp
题目描述:给N个数(相同的两个数算做两个),问可以构造出F的倍数的组合的个数(模1e8)。
思路:设dp[i]表示可以构造出来的数模F后等于i的数的个数,且已经计算出前k个数对该数组的影响,当增加第k+1个数的时候,每一个dp[i]都可以转移到dp[(i+num)%F],其中num为第k+1个数的大小。初始状态设dp[0]=1(否则无法转移,或者可以认为一个数也没有也可以看做是一个F的倍数),结束后dp[0]-1便是所求的答案。
code:
题目描述:给N个数(相同的两个数算做两个),问可以构造出F的倍数的组合的个数(模1e8)。
思路:设dp[i]表示可以构造出来的数模F后等于i的数的个数,且已经计算出前k个数对该数组的影响,当增加第k+1个数的时候,每一个dp[i]都可以转移到dp[(i+num)%F],其中num为第k+1个数的大小。初始状态设dp[0]=1(否则无法转移,或者可以认为一个数也没有也可以看做是一个F的倍数),结束后dp[0]-1便是所求的答案。
code:
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int mod=100000000; int arr[1005]={0},brr[1005]={0}; int n,f,num; int main() { scanf("%d%d",&n,&f); arr[0]=1; for(int i=0;i<n;i++) { scanf("%d",&num); memset(brr,0,sizeof(brr)); for(int i=0;i<f;i++) brr[(i+num)%f]=arr[i]; for(int i=0;i<f;i++)arr[i]=(arr[i]+brr[i])%mod; } printf("%d\n",arr[0]-1); return 0; }
相关文章推荐
- Cow Frisbee Team, 2009 Mar,usaco
- 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- [USACO09MAR]Cow Frisbee Team
- USACO 2009 Mar CowFrisbeeTeam
- 【BZOJ】3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队(dp)
- BZOJ 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 动态规划
- BZOJ 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 动态规划
- bzoj3400[Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- bzoj3400[Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- bzoj3400 [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- bzoj:3400 [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- BZOJ3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- TOJ 1609 Moo University - Team Tryouts
- TOJ 3429: Best Cow Line 线性算法
- TOJ 3838: Cow Line -- 排列
- TOJ 1825.Filling Out the Team
- TOJ 1644: Cow Acrobats -- 二分,贪心
- TOJ 1671 Steady Cow Assignment -- 多重二分图匹配 + 二分查找