[P5228 [AHOI2013] 找硬币]题解-DP
20230718
传送门
发现
也就是说我的面值最大是
这样最大面值就可以用来做下标
其实最开始也不知道怎么做
我们现在考虑dp
由于
所以
转移过程中
我可以把每一个价钱里所用的
类似倍增的一步一步逼近的思想
每一个
这样统计总共有
那么
时间复杂度为
关键就在于想到用dp来维护
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5;
int n,a[55],dp[maxn+5],ans=0,cnt=0;
int main(){
/*2023.7.18 H_W_Y P5228 [AHOI2013] 找硬币 dp*/
memset(dp,0x3f,sizeof(dp));dp[1]=0;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]),dp[1]+=a[i];
ans=dp[1];
for(int i=1;i<=maxn/2;i++)
for(int j=2;j*i<=maxn;j++){cnt=0;
for(int k=1;k<=n;k++) cnt+=a[k]/(i*j);
dp[i*j]=min(dp[i*j],dp[i]-cnt*(j-1));
ans=min(ans,dp[i*j]);
}
printf("%d\n",ans);
return 0;
}
本文作者:H_W_Y
本文链接:https://www.cnblogs.com/H-W-Y/p/17563464.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步