dp+抽屉原理 codeforces577b--Modulo Sum、swjtuoj2383--Music Problem
来源:互联网 发布:现代舞服装淘宝 编辑:程序博客网 时间:2024/06/07 11:40
思路与代码均为借鉴:http://www.cnblogs.com/qzqzgfy/p/5621693.html!
模下背包
题目链接:http://codeforces.com/problemset/problem/577/B
本题用到的一个余数性质:(a+b)%m==(a%m+b%m)%m;
题意:输入n、m,序列中包含n个整数,问是否能够找到一个子序列的和使得整除m
思路:根据上面提到的余数的性质,可以用dp,但是复杂度为O(n*m),这样可以优化么?有一个抽屉原理;对于本题的说明就是:对于n>m,那么必定可以找到子序列整除m;
证明:记录各数字的前缀和,则必有取余m有相同的余数的(√),则两个相同的余数之间的序列和即可满足整除m(!)
代码:
#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>#include<iostream>int a[2000005],f[1003],n,m,g[1003];int main(){ scanf("%d%d",&n,&m); if (n>m) { printf("YES"); return 0; } for (int i=1; i<=n; i++) scanf("%d",&a[i]); for (int i=1; i<=n; i++) { for(int j=0; j<=m-1; j++) g[j]=f[j]; for(int j=m-1; j>=1; j--) if(f[j]) g[(a[i]%m+j)%m]=1; g[a[i]%m]=1; for(int j=0; j<=m-1; j++) f[j]=g[j]; } if (f[0]) printf("YES"); else printf("NO"); return 0;}
题目链接:http://swjtuoj.cn/problem/2383/
题意:输入n,序列包含n个整数,问是否能够找到一个子序列的和为3600或7200;
思路:思路和上题一样一样的,7200%3600==0,所以题意可以转化为是否能够找到一个子序列的和整除m=3600?
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000006;int a[maxn],g[4003],f[4003];int main(){ int n,m; int T; scanf("%d",&T); while(T--) { int flag=0; scanf("%d",&n); m=3600; for(int i=0; i<n; i++) scanf("%d",&a[i]); memset(g,0,sizeof(g)); memset(f,0,sizeof(f)); if(n>m) flag=1; else { for(int i=0; i<n; i++) { for(int j=0; j<=m-1; j++) g[j]=f[j]; for(int j=m-1; j>=1; j--) { if(f[j]) g[(a[i]%m+j)%m]=1; //已经存在的余数加上新来数a[i]的余数再取余得到的结果,若为0则整除m! g[a[i]%m]=1; } for(int j=0; j<=m-1; j++) f[j]=g[j]; } if(f[0]) flag=1; } if(flag) printf("YES\n"); else printf("NO\n"); } return 0;}
阅读全文
0 0
- dp+抽屉原理 codeforces577b--Modulo Sum、swjtuoj2383--Music Problem
- codeforces377B Modulo Sum(抽屉+dp)
- codeforces 377B Modulo Sum(数学,dp)
- codeforces 577B Modulo Sum(DP||set)
- hdu 5776 sum (抽屉原理)
- Codeforces Round #319 (Div. 2) 577B Modulo Sum(dp)
- codeforces 577B B. Modulo Sum(背包+dp)
- cf#319-div2-B. Modulo Sum-(dp) 求模
- Codeoforces 577B Modulo Sum (鸽巢定理+dp)
- Codeforces 577 B Modulo Sum 简单数学+dp
- Codeforces Round #319 (Div. 2)B. Modulo Sum(数学,DP)
- codeforces 577B B. Modulo Sum(背包+dp)
- Codeforces 577B Modulo Sum 鸽巢原理
- HDU 5776 sum(抽屉原理)
- Hdu5776 sum 抽屉原理+同余定理
- hdu5776——sum(抽屉原理)
- 西南交通大学第十三届ACM决赛 D.Music Problem 背包DP
- CF Modulo Sum
- Java中字符流和字节流到底有什么区别!!!
- 机器视觉资源:机器视觉开源代码集合(转)
- C++中static用法
- 2017.05.24:SQL查询
- AI时代的思维方式
- dp+抽屉原理 codeforces577b--Modulo Sum、swjtuoj2383--Music Problem
- Vijos P1696 数与连分数【连分数】
- ajax代替iframe
- 负载均衡详解(1)
- json日期格式转换
- The required Server component failed to start so Tomcat is unable to start问题解决
- SDUT 3799 离散题目5
- 机器视觉资源:计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- struts2的项目目录及承担的作用(写了注册验证来帮助理解)