T89379 【qbxt】复读警告

题解

这是一道DP题

设置状态  f[ i ][ j ]  前 i 个数中所选数字之和 % key 得 j 的最大方案数

当前我们该选择第 i 个数字了,那么这个数字可以选也可以不选

不选  i  的话方案数直接由 f[ i-1 ][ j ] 转移过来

选  i  的话,选择前 i-1 个数字的时候 % key 的余数是 j-a[ i ]%key ,注意减完之后处理负数的情况

加法分类原理,转移方程:f[ i ][ j ] += f[ i-1 ][ j ] + f[ i-1 ][ t ]

边界条件:f[0][0]=1

ans = f[n][0]

代码

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<queue> using namespace std; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} const int mod=1e9+;
int n,key;
int a[];
int f[][]; int main()
{
n=read();key=read();
for(int i=;i<=n;i++)
a[i]=read(); f[][]=; for(int i=;i<=n;i++)
for(int j=;j<key;j++)
{
int t=j-a[i]%key;
if(t<) t=(t+key)%key;
f[i][j]+=(f[i-][j]+f[i-][t])%mod;
} printf("%d",f[n][]%mod); return ;
}

最新文章

  1. vim - char code and charset
  2. iOS socket 笔记
  3. NLua - 基于Lua的C#脚本引擎
  4. Convert和Parse对null值处理的区别
  5. MVC3和MVC4相关问题
  6. Javascript基础--成员函数(六)
  7. mysql查询差集
  8. 14条建议,使你的IT职业生涯更上一层楼
  9. [转]【基于zxing的编解码实战】精简Barcode Scanner篇
  10. 搭建Hadoop集群 (一)
  11. 移动互联与大数据之美-逐浪CMS2 X1.1发布
  12. startssl证书firefox支持配置
  13. Spring Mvc 用Demo去学习
  14. sqlite 的基本使用1
  15. Golang中的信号处理
  16. 201421123042 《Java程序设计》第9周学习总结
  17. git 命令详细
  18. LeetCode算法题-K-diff Pairs in an Array(Java实现)
  19. jpa table主键生成策略
  20. 浅谈《think in java》:二 一切都是对象

热门文章

  1. linux命令详解——xargs
  2. Linux Shell Web超级终端工具shellinabox
  3. Oracle 触发器学习笔记一
  4. Jmeter (二) 参数化
  5. div 可滚动但不显示滚动条
  6. MySQL in和limit不能连用的问题
  7. LeetCode 01 两数之和
  8. 持久化存储与HTTP缓存
  9. css实现单行、多行文本超出显示省略号
  10. php类相关知识----抽象类