首页 > 其他 > 详细

【洛谷习题】小A点菜

时间:2018-09-05 08:39:46      阅读:229      评论:0      收藏:0      [点我收藏+]

虽然也是一道dp的入门题,但就是想不到,或者说不会实现。dp还是要多做题。

链接:https://www.luogu.org/problemnew/show/P1164


 

可以定义状态dp[i][j]表示考虑前i道菜,刚好花费j元的方案数。那么对于某个花费的方案数,这个花费加上一道菜的价格产生的新的花费的方案数,两个应该是相等的。则dp[i][j]+=dp[i-1][j-a[i]]就可以求出方案数。同样的,可以将空间占用降到一维。

技术分享图片
 1 #include<cstdio>
 2 const int maxn=105,maxm=1e4+5;
 3 int n,m,a[maxn],dp[maxm];
 4 int main() {
 5     scanf("%d%d",&n,&m);
 6     for(int i=1;i<=n;++i) scanf("%d",&a[i]);
 7     dp[0]=1;
 8     for(int i=1;i<=n;++i)
 9         for(int j=m;j>=a[i];--j)
10             dp[j]+=dp[j-a[i]];
11     printf("%d",dp[m]);
12     return 0;
13 }
AC代码

 

【洛谷习题】小A点菜

原文:https://www.cnblogs.com/Mr94Kevin/p/9589409.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!