upcoj 2169 DP
来源:互联网 发布:2017最火的编程语言 编辑:程序博客网 时间:2024/06/15 11:55
题意:求给出的数组中元素求和能被m整除的最大元素个数.
一开始想BFS搜索,数据太大,无果。太急去敲了,应该早就料到数据太大,但是有一个思路之后却总想去试试。。
好了,DP
状态转移方程dp【i】【(v+a【i】)%m】=max(dp【i】【(v+a【i】)%m】,dp【i-1】【v】+1) // dp[i][v]代表对于第i个状态数字处理时,能组成%m=v的数字的个数
但是由于规模将近5qw 直接存数组不行,用另外一个数组来记录前一个数组的状态。
#include<iostream>#include<algorithm>#include<cstring>#include<queue>using namespace std;int a[550];int dp[100100];int fdp[100100];int main(){ int T; cin>>T; while(T--) { int n,m; cin>>n>>m;int sum=0; for(int i=0;i<n;i++) { cin>>a[i]; sum+=a[i]; } memset(dp,0,sizeof(dp)); memset(fdp,0,sizeof(fdp)); fdp[0]=1; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) dp[j]=fdp[j]; for(int j=0;j<m;j++) { if(fdp[j]>0) //有j余出 { dp[(j+a[i])%m]=max(dp[(j+a[i])%m],fdp[j]+1); } } for(int j=0;j<m;j++) fdp[j]=dp[j]; } cout<<fdp[0]-1<<endl; } return 0;}
- upcoj 2169 DP
- [数位dp] upcoj 2223 A-Number and B-Number
- UPCOJ 4333
- UPCOJ 4201
- UPCOJ 4199
- UPCOJ 4198
- upcoj 2174 二维树状数组
- 线段树区间维护upcoj
- upcoj 2525 Twinkle Twinkle Little Star 题解
- upcoj 1975 棋盘覆盖二分匹配+2107单调队列+1109
- hdu 1542 upcoj 2540 矩形面积并 线段树
- [思路题] upcoj 2219 A^X mod P
- [线段树+离线处理] upcoj 2224 Boring Counting
- 2013山东省赛D题 upcoj 2220: Rubik’s cube(爆搜)
- dp
- dp
- dp
- 【DP】
- JAVA从入门到提高—程序设计基础01
- JDK,JRE,JVM区别与联系
- BF,KMP,AC详解
- mongo capped collection功能介绍及使用注意事项
- ZXing 加入条形码一维码处理
- upcoj 2169 DP
- Agile Web Development with Rails第六章笔记——任务A:创建应用程序
- 罗列HostName下所有的git工程
- ffmpeg(1)详细说明:FFMPEG教程01指导1:制作屏幕录像
- 布局参数
- 计算机操作系统调度算法,C++实现FSFS,SJF,RR,多级反馈队列算法
- android studio使用教程
- 高性能服务器
- Android之Activity学习