博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电ACM——2069,Coin Change(DP)
阅读量:4049 次
发布时间:2019-05-25

本文共 811 字,大约阅读时间需要 2 分钟。

看了这位大佬的博客:

发现,原来这是一道二维费用的背包问题。
设置三维数组dp[i,j,k]:
状态:dp[i,j,k]表示用前i种硬币,硬币用了j个,总面值为k的最大方案数
状态转移方程:
dp[i,j,k]=
{
dp[i-1,j,k] , k<a[i]
dp[i-1,j,k]+dp[i,j-1,k-a[i]], k>=a[i]
}
大佬是用二维滚动数组来完成的,则
dp[j,k]=dp[j,k]+dp[j-1,k[a[i]]

代码如下:

#include
#include
#include
#include
using namespace std;int dp[101][251],a[6]={0,1,5,10,25,50}; int main(){ int n,i,j,k,T,ans; while(cin>>n) { memset(dp,0,sizeof(dp)); dp[0][0]=1;ans=0; T=1; if(n>=50) T=5; else if(n>=25) T=4; else if(n>=10) T=3; else if(n>=5) T=2; for(i=1;i<=T;i++) for(j=1;j<=100;j++) for(k=a[i];k<=n;k++) dp[j][k]+=dp[j-1][k-a[i]]; for(i=0;i<=100;i++) ans+=dp[i][n]; cout<
<

转载地址:http://tbdci.baihongyu.com/

你可能感兴趣的文章
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>
【leetcode】Clone Graph(python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
【leetcode】Pascal's Triangle II (python)
查看>>
java自定义容器排序的两种方法
查看>>
如何成为编程高手
查看>>
本科生的编程水平到底有多高
查看>>
AngularJS2中最基本的文件说明
查看>>
从头开始学习jsp(2)——jsp的基本语法
查看>>
使用与或运算完成两个整数的相加
查看>>
备忘:java中的递归
查看>>
DIV/CSS:一个贴在左上角的标签
查看>>
Solr及Spring-Data-Solr入门学习
查看>>
Vue组件
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>
<转>文档视图指针互获
查看>>