看似dp,实则不然
2026-08-26 12:24:22
发布于:广东
1阅读
0回复
0点赞
dp的方法大家见惯了,发一个非dp的方法,值得推荐😀
纯代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=2e6/11+10;
int dp[maxn];
int main(){
int n;
cin>>n;
int k=n/11;
int minsum=1e9;
for(int i=0;i<=k;i++){
dp[i]+=i;
dp[i]+=(n-i*11)/5;
dp[i]+=(n-i*11)%5;
minsum=min(minsum,dp[i]);
}
cout<<minsum;
}
思路:打好基本框架之后,定义dp数组,只是取个名字,其长度为n/11,在后面的计算中,只需要便利0~n/11,计算过程中,定义minsum储存记录最小值,dp[i]+=i是有i个11,dp[i]+=(n-i11)/5是计算减掉一计算的i11(11个i),剩余数字除以五,%i则是计算/5之后的余数,即%5个1。
最后计算minsum和dp[i]的较小值,最后得出minsum,输出
注意:循环从0开始
不足:只限于含有倍数的钞票
点个赞呗!
这里空空如也








有帮助,赞一个