Codeforces 837D - Round Subset(dp)
思路:dp。0是由2*5产生的。
①dp[i][j]表示选i个数,因子2的个数为j时因子5的个数。
状态转移方程:dp[i][j]=max(dp[i][j],dp[i-1][j-c2]+c5)。
初始化:dp[0][0]=0,dp[i][j]=-INF(i!=0||j!=0)。因为所有状态都是由dp[0][0]转移过来的,所以除此之外的dp[i][j]都得初始化为-INF,防止对答案产生影响。
代码1:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls rt<<1,l,m
#define rs rt<<1|1,m+1,r
#define pb push_back
const int INF=0x3f3f3f;
const int N=;
const int M=*;//每个数最多含有64个2,最多200个数
int dp[N][M];
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n,k;
cin>>n>>k;
for(int i=;i<=k;i++)
{
for(int j=;j<M;j++)
dp[i][j]=-INF;
}
dp[][]=;
for(int i=;i<n;i++)
{
ll a;
int c2=,c5=;
cin>>a;
while(a%==)
{
a/=;
c2++;
}
while(a%==)
{
a/=;
c5++;
}
for(int j=k;j>=;j--)//j从k到1,因为上面的值是由下面的转移过来的,在没转移前下面的值是上一次的值。如果从1到k,下面的值还没有转移到上面就被破坏了!
{
for(int l=c2;l<M;l++)
{
dp[j][l]=max(dp[j-][l-c2]+c5,dp[j][l]);
}
}
}
int ans=;
for(int i=;i<M;i++)
ans=max(ans,min(i,dp[k][i]));
cout<<ans<<endl;
return ;
}
②你应该猜到的。跟上面差不多。
dp[i][j]表示选i个数,因子5的个数为j时因子2的个数。
状态转移方程:dp[i][j]=max(dp[i][j],dp[i-1][j-c5]+c2)。
初始化:dp[0][0]=0,dp[i][j]=-INF(i!=0||j!=0)。因为所有状态都是由dp[0][0]转移过来的,所以除此之外的dp[i][j]都得初始化为-INF,防止对答案产生影响。
代码2:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls rt<<1,l,m
#define rs rt<<1|1,m+1,r
#define pb push_back
const int INF=0x3f3f3f;
const int N=;
const int M=*;
int dp[N][M];
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n,k;
cin>>n>>k;
for(int i=;i<=k;i++)
{
for(int j=;j<M;j++)
dp[i][j]=-INF;
}
dp[][]=;
for(int i=;i<n;i++)
{
ll a;
int c2=,c5=;
cin>>a;
while(a%==)
{
a/=;
c2++;
}
while(a%==)
{
a/=;
c5++;
}
for(int j=k;j>=;j--)
{
for(int l=c5;l<M;l++)
{
dp[j][l]=max(dp[j-][l-c5]+c2,dp[j][l]);
}
}
}
int ans=;
for(int i=;i<M;i++)
ans=max(ans,min(i,dp[k][i]));
cout<<ans<<endl;
return ;
}
Codeforces 837D - Round Subset(dp)的更多相关文章
- Codeforces 837D Round Subset(背包)
题目链接 Round Subset 题意 在n个数中选择k个数,求这k个数乘积末尾0个数的最大值. 首先我们预处理出每个数5的因子个数c[i]和2的因子个数d[i] 然后就可以背包了. 设f[i] ...
- CodeForces 837D - Round Subset | Educational Codeforces Round 26
/* CodeForces 837D - Round Subset [ DP ] | Educational Codeforces Round 26 题意: 选k个数相乘让末尾0最多 分析: 第i个数 ...
- Codeforces Gym101341K:Competitions(DP)
http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择 ...
- codeforces Educational Codeforces Round 16-E(DP)
题目链接:http://codeforces.com/contest/710/problem/E 题意:开始文本为空,可以选择话费时间x输入或删除一个字符,也可以选择复制并粘贴一串字符(即长度变为两倍 ...
- Codeforces Global Round 1D(DP,思维)
#include<bits/stdc++.h>using namespace std;int dp[1000007][7][7];int cnt[1000007];int main(){ ...
- CodeForces B. The least round way(dp)
题目链接:http://codeforces.com/problemset/problem/2/B B. The least round way time limit per test 5 secon ...
- Codeforces 837D--Round Subset (DP)
原题链接:http://codeforces.com/contest/837/problem/D 题意:在n个数字中,取k个数,使这些数的乘积后缀“0”的个数最大,输出后缀0的最大数量. 思路:显然只 ...
- 【Codeforces】CF 2 B The least round way(dp)
题目 传送门:QWQ 分析 求结尾0的数量QwQ. 10只能是$ 2 \times 5 $,我们预处理出每个数因子中2和5的数量. 我们接着dp出从左上到右下的经过的最少的2的数量和最少的5的数量.两 ...
- Codeforces 837D - Round Subset DP
先算出每个数的pop1(twonum),pop(fivenum)然后DP ans[i][j]表示选i个数有j个2时最多有多少个5 转移方程是 ;j--) { ;w++) { ans[j][w]=max ...
随机推荐
- Javascript-逻辑或(||)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 007-配置IP和DNS
2.配置DNS. 3.
- javascript 判断数据类型
Object.prototype.toString.call(asddfff) //报错asddfff没被定义Object.prototype.toString.call(undefined) //& ...
- java.lang.NoClassDefFoundError: org/apache/http/client/config/RequestConfig
java 错误.java.lang.NoClassDefFoundError: org/apache/http/client/config/RequestConfig 本质上是httpClient的j ...
- python之路----hashlib模块
在平时生活中,有很多情况下,你在不知不觉中,就用到了hashlib模块,比如:注册和登录认证注册和登录认真过程,就是把注册用的账户密码进行:加密 --> 解密 的过程,在加密.解密过程中,用的了 ...
- python之路----面向对象的封装特性
封装 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. 广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种只让自己的对象能调用自己类中的方法 狭义上的封装 —— 面向对象的三大 ...
- python no module named 'win32api'
在cmd下执行 pip install pypiwin32api 即可
- JAVA注解@Interface基础知识
java注解是在JDK5时引入的新特性,大多数框架(SpringBoot.MyBatis.Quartz)背后都在大量使用注解开发. 一.先进行一个小试验,了解注解开发流程 建立maven项目annot ...
- 关于编译安装php
之前也装过一次是nginx和php的, 这次也是... but, 不知道是不是版本的问题还是环境方面的影响, 导致之前的gd库是安装失败的, 所以上次安装zabbix也是失败的, 这次换了5.6.2版 ...
- node包管理工具--nvm(windows)
windows 安装nvw-windows 使用nvm工具: windows使用nvm-noinstall.zip安装 nvm-noinstall.zip 这个是绿色免安装版本,但是使用之前需要配置 ...