小班的储钱罐
Posted dai-jia-ye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小班的储钱罐相关的知识,希望对你有一定的参考价值。
裸地DP,方程为:dp[j]=min(dp[j],dp[j-b[i]]+a[i])。代码:
#include<iostream> #include<cmath> #include<cstring> #define INF 0x3f3f3f3f using namespace std; int n,m,k; int dp[100001],a[110000],b[1100000]; int main() { cin>>n>>m; cin>>k; m=m-n;//剩余空间 for(int i=1;i<=k;i++) { cin>>a[i]>>b[i]; } memset(dp,INF,sizeof(dp)); dp[0]=0; for(int i=1;i<=k;i++) { for(int j=b[i];j<=m;j++)//从b[i]开始 { dp[j]=min(dp[j],dp[j-b[i]]+a[i]); } } if(dp[m]!=INF) { cout<<"The minimum amount of money in the piggy-bank is "<<dp[m]<<"."; } else { cout<<"This is impossible."; } }
嗯~~
以上是关于小班的储钱罐的主要内容,如果未能解决你的问题,请参考以下文章