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 ...
随机推荐
- BCB TLable控件透明背景属性
当我们希望一个Label适应它父窗口的背景时,设置Tranparent属性值就OK Transparent:true 透明 false 不透明
- 消息 8101,级别 16,状态 1,第 1 行 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'ResourceInfo'中的标识列指定显式值。
问题分析: 意思是你的主键是自动编号类型的,所以不能向该列插入数据. 解决办法: 执行 语句 :SET IDENTITY_INSERT CUSTOMER_TBL ON 然后在向表中插入数据,如inse ...
- #C++初学记录(算法2)
A - Game 23 Polycarp plays "Game 23". Initially he has a number n and his goal is to trans ...
- linux下操作iso文件的两个shell程序
记得这还是当初玩cdlinux时弄的,当初应该是由于windows下的Ultraiso对cdlinux的镜像修改后导致镜像无法引导,所以就使用linux下的命令进行操作 这应该是挂载iso文件的命令: ...
- ac1097
判断线段与直线的相交 这里有个地方需要注意的就是在 转换的时候容易报错 在叉积完后的判断符号的时候需要注意 这个地方会超出int 的范围 2014-06-0320:14:04 #include &l ...
- Postman: Pre-request Script,设置body 变量
1)Postman Pre-request Script 设置变量名 2)把变量放在body里 3)Send后查看变量是否被替换
- linux基础命令---chattr
chattr 改变文件的属性,这个命令只有超级用户才能使用.这个指令适用于ext2.ext3.ext4.xfs.ubifs.reiserfs.jfs系统. 此命令的适用范围:RedHat.RHEL.U ...
- 查找nginx安装的路径以及相关安装操作命令
查找nginx安装的路径以及相关安装操作命令 Linux环境下,怎么确定Nginx是以那个config文件启动的? [root@localhost ~]# ps -ef | grep nginxroo ...
- 【CSS3】纯CSS代码实现模拟时钟,+js对时功能。
使用CSS3纯代码来实现模拟时钟,及指针动画功能. 在这里主要使用到css3一些基本元素: border-radius:圆角边框,画圆形:表盘 Transform:变换,旋转,扭曲:刻度盘,指针形状 ...
- jquery基础框架
(function(window,undefined){ var arr = [], push = arr.push, slice = arr.slice; //首先要做的就是封装一个parseHtm ...