题目链接:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2616
题目大意:从一个整数序列a中选出一些数使得其和被f整除,问有多少种选法。
分析:用dp[i][j]表示前i个数的各种组合中和模f余j的数量,递推关系为
dp[i][(j + a[i]) % f] = dp[i - 1][(j + a[i]) % f] + dp[i - 1][j]
即分是否选a[i]两种情况,最后dp[i][a[i]]++,表示只选a[i]的情况。容易看出dp[i]各项求和等于2^i - 1。
顺便提一提和它很相似的一个问题:从n个数选出一些数使得其和被f整除,要求输出一种选法,不存在就输出-1。只要n ≥ f就一定可以选出来,抽屉原理。
#include
#include
#include
#include
#include
#include