Uva674 完全背包求方案数

dp[i][j]表示用前j种硬币组成i分钱时的种类数
那么状态转移方程是:dp[i][j]+=DP(i-k*v[j],j-1)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long int dp[][];
int q[]= {,,,,}; int solve(int s,int k)
{
if(dp[s][k]!=-) return dp[s][k];
dp[s][k]=;
for(int i=k; i< && s>=q[i]; i++)
dp[s][k]+=solve(s-q[i],i);
return dp[s][k];
} int main()
{
memset(dp,-,sizeof(dp));
for(int i=; i<; i++)
dp[][i]=;
int n;
while(cin>>n)
cout<<solve(n,)<<endl;
return ;
}
递推的写法,自小向大推:
#include<iostream>
using namespace std;
int n,coin[]= {,,,,};
long long dp[]= {}; int main()
{
for(int i=; i<; i++)
for(int j=; j<; j++)
dp[j+coin[i]]+=dp[j]; while(cin>>n)
cout<<dp[n]<<endl;
return ;
}
另一种:
#include<stdio.h>
#include<string.h>
#define N 7500
int dp[N][];
int v[]= {,,,,};
int DP(int i,int j)
{
if(dp[i][j]!=-)
return dp[i][j];
dp[i][j]=;
for(int k=; i-k*v[j]>=; k++)
dp[i][j]+=DP(i-k*v[j],j-);
return dp[i][j];
}
int main()
{
int n;
memset(dp,-,sizeof(dp));
while(scanf("%d",&n)!=EOF)
{
for(int i=; i<=n; i++)
dp[i][]=;
printf("%d\n",DP(n,));
}
return ;
}
Uva674 完全背包求方案数的更多相关文章
- 洛谷P1164 小A点菜(01背包求方案数)
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- HDU5119【dp背包求方案数】
题意: 有n个数,问有多少方案满足取几个数的异或值>=m; 思路: 背包思想,每次就是取或不取,然后输出>=m的方案就好了. #include <bits/stdc++.h> ...
- 背包DP 方案数
题目 1 P1832 A+B Problem(再升级) 题面描述 给定一个正整数n,求将其分解成若干个素数之和的方案总数. 题解 我们可以考虑背包DP实现 背包DP方案数板子题 f[ i ] = f[ ...
- poj3254 Corn Fields 利用状态压缩求方案数;
Corn Fields 2015-11-25 13:42:33 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10658 ...
- 518-零钱兑换 II(完全背包-求方案总数)
518-零钱兑换 II(完全背包-求方案总数) 给定不同面额的硬币和一个总金额.写出函数来计算可以凑成总金额的硬币组合数.假设每一种面额的硬币有无限个. 示例 1: 输入: amount = 5, c ...
- hdu2126(求方案数的01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意: n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数. 分析:一看 ...
- HDU 2126 01背包(求方案数)
Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- AcWing 11. 背包问题求方案数
//g[i,j]表示f[i,j]取最大值的方案数目 //体积最多是j 全部为0,v>=0 //体积恰好为j f[0][0]=0,f[i]=无穷,v>=0 //体积至少是j f[0][0]= ...
- hihocoder 1680 hiho字符串2 dp求方案数+递归
我们定义第一代hiho字符串是"hiho". 第N代hiho字符串是由第N-1代hiho字符串变化得到,规则是: h -> hio i -> hi o -> ho ...
随机推荐
- Divide and conquer:Subset(POJ 3977)
子序列 题目大意:给定一串数字序列,要你从中挑一定个数的数字使这些数字和绝对值最小,求出最小组合数 题目的数字最多35个,一看就是要数字枚举了,但是如果直接枚举,复杂度就是O(2^35)了,显然行不通 ...
- C#字符串的四舍五入
Round(Decimal) Round(Double) Round(Decimal, Int32) Round(Decimal, MidpointRounding) Round(Double, In ...
- inline函数的用法
在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数.栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间 ...
- Spring JMS ActiveMQ整合(转)
转载自:http://my.oschina.net/xiaoxishan/blog/381209#comment-list ActiveMQ学习笔记(四)http://my.oschina.net/x ...
- LeetCode 453 Minimum Moves to Equal Array Elements
Problem: Given a non-empty integer array of size n, find the minimum number of moves required to mak ...
- bootstrap清除拟态框内添加新HTML再打开时会有缓存现象
$(function(){ $("#editor").on("hidden.bs.modal",function(){ //清除缓存方法 $(this).fin ...
- perl检查变量是否定义
my $label = defined($pieces[0]) ? $pieces[0] : ""; my @alreadyAddedCol = $node1->{DB}-& ...
- python基础语法(二)
本文主要包括以下内容 函数 切片 迭代 列表生成式 生成器 迭代器 函数 定义函数 定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块 ...
- C#学习笔记----C#中的闭包机制
http://www.cnblogs.com/jiejie_peng/p/3701070.html http://www.cnblogs.com/Ribbon/p/3611457.html “ 若匿名 ...
- HTML CSS微信CSS显示一些总结
微信显示网页是调用腾讯自带的浏览器内核,由于腾讯浏览器内核对css展示效果没有谷歌浏览器好,导致用谷歌浏览器写好的网页,放到微信页面之后,显示的效果就发生变化,所以调整css样式显得那么吃力: 1. ...