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