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 ...
 
随机推荐
- liferay增删改简单小练习
			
liferay简单增删改 大家都知道,我们每学习一项技能的时候,都会做一些简单的小实例,来检验我们学习成果,这个也不例外. 我建议大家学习完三大框架之后再来看这个demo. 首先:先说一下,零碎的知识 ...
 - BootStrap同时显示多个Modal解决方案
			
使用BootStrap自带的Modal的时候,如果同时调用多个Modal,那么只能看到背景颜色加深但是看不见新的Modal页面. 问题主要是Modal的z-index有问题,重新计算z-index并赋 ...
 - Hibernate—部分
			
数据持久化的3种方式: merge()方法: 先得到对象的副本:再判断, 如果副本为瞬时状态,则用save()插入 如果副本为游离状态,则用update()更新 最终都是不改变传入对象的状态 save ...
 - 关于安装VS2010过程中的错误
			
下午本来安装好了VS:但是后来由于自己更新太多功能:直接使得VS太卡打不开:卸载重装:但是卸载的时候在“开始”里面的帮助文档和一些目录在卸载项里面没有:而在“开始"菜单就有:所以我索性把整个 ...
 - 文本按列导入excel
			
打开excel,选择数据选项卡,自文本选项.
 - 谈话准备.xmind 思维导图模版
			
谈话准备.xmind 思维导图模版,谈话准备.xmind.zip 谈话准备 目标 1…… 2…… 3…… 影响决定因素 进程 经费 策略 问题 客户 竞争对手 竞争对手 潜在 现存 问题 个性 团队 ...
 - 基于webview的Hybrid app和React Native及html5
			
基于webview的Hybrid app和React Native及html5 React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iO ...
 - 安装Hue后的一些功能的问题解决干货总结(博主推荐)
			
不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...
 - Ubuntu Linux系统环境变量配置文件
			
Ubuntu Linux系统环境变量配置文件: /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. ...
 - 20145212罗天晨 注入shellcode实验及Retuen-to-libc实验
			
注入shellcode实验 实验步骤 一.准备一段shellcode 二.设置环境 Bof攻击防御技术 1.从防止注入的角度来看:在编译时,编译器在每次函数调用前后都加入一定的代码,用来设置和检测堆栈 ...