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 ...
随机推荐
- codeforces 540B.School Marks 解题报告
题目链接:http://codeforces.com/problemset/problem/540/B 题目意思:给出 k 个test的成绩,要凑剩下的 n-k个test的成绩,使得最终的n个test ...
- 【linux】linux脚本中#!/bin/sh的含义
来源:百度知道 #! /bin/sh 是指此脚本使用,/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径.
- 类中实现 Dispose And Finalize
1.Dispose方法中,应该使用GC.SuppressFinalize防止GC调用Finalize方法,因为显示调用Dispose比较好. 2.Disposed字段保证了两次调用Dispose方法不 ...
- 3ds max的动画输出
转自:http://zhidao.baidu.com/link?url=qc3vV2A9-ydb-YiVKoF7z_bIIRlmLSkyl8DcuWNYn8FaBxa2BDVLwuGPX_jYWxbw ...
- chaper3_exerise_Uva1368_DNA序列
#include<iostream> #include<stdio.h> #include<cmath> #include<string> #inclu ...
- AJAX 汽车详细信息练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- mysql 源码安装
yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel perl perl-CPAN libpng libpng-devel freetyp ...
- OCJP(1Z0-851) 模拟题分析(五)over
Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有 ...
- java 访问 usb
java 要访问 usb 设备,通常要自己写c/c++代码,然后再用 java 访问这些组件,以达到控制usb设备的目的.但现在有一个开源组件 libusb 帮我们做好了访问usb设备的封装(包括wi ...
- view的setTag() 和 getTag()应用 (转)
原文地址:http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个 ...