hdu 1284完全背包
http://acm.hdu.edu.cn/showproblem.php?pid=1284
钱币兑换问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7265 Accepted Submission(s): 4268
12553
13137761
Statistic | Submit | Discuss | Note
| Home | Top | Hangzhou Dianzi University Online Judge 3.0 Copyright © 2005-2015 HDU ACM Team. All Rights Reserved. Designer & Developer: Wang Rongtao LinLe GaoJie GanLu Total 0.002001(s) query 2, Server time : 2015-05-28 22:32:58, Gzip enabled |
Administration |
#include<iostream>
#include<cstdio>
using namespace std;
int dp[];
int main()
{
int a[]= {,,,};
dp[]=;
for(int i=; i<=; i++)
{
for(int j=i; j<; j++)
{
dp[j]+=dp[j-a[i]];//为什么要dp[j-a[i]],因为每次执行这一步,都是假设再用一枚当前硬币,所以要加上减去这枚硬币以后的钱数的方法数
}
}
int n;
while(scanf("%d",&n)!=EOF)
cout<<dp[n]<<"\n";
return ;
} /*
方法2:
转:
思路:首先看能兑换多少个三分硬币的,然后当三分硬币分别为1,2,3,.... n时有多少
个2分硬币的,为什么要这样确定了?因为只要还可以兑换出三分硬币和二分硬币的那么
剩下的价值一定可以让价值为1的硬币塞满。开头为什么s为N/3+1呢?因为可以这样想,
假设N=7,那么只包含3分硬币和1分硬币的组合方式为:3,3,1; 3,1,1,1,1;
所以N/3是实际上可以容纳三分硬币的个数。而增加1是因为可以全部换成1分的硬币。
有人会疑问,那么t = (N-3*i)/2不是会重复吗?这是不可能的,因为硬币的价值是递
增的,只有当i的值为N/3时,t的值可以为0或者1。所以不会重复。
*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int N;
int main()
{
while(~scanf("%d", &N))
{
int s = N/+;
for(int i = ; i <= N/ ; i++)
{
int t = (N-*i)/;
s += t;
}
printf("%d\n", s);
}
return ;
} /*方法3:(母函数)
题目的意思就是说给你三种面值的币分别是1分、2分、3分,那么问你一个钱数n有几种方案可以拼凑得到这个钱数n?
这道题还是比较好看的,我们根据母函数的定义,以及多项式的每一项和系数所表示的含义,我们可以定义母函数G(x)=(1+x+x^2+x^3--------)*(1+x^2+x^4+x^6+x^8--------)*(1+x^3+x^6+x^9--------------),那么我们使用母函数的额展开式对应的指数就是能表示的钱币数,系数就是表示该钱币数的方案数。
所以问题就是求出对应的n的系数就可以了,这个比较简单,就是模拟手工多项式的展开, */
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int Max=;
int ans[Max];
int tans[Max];
int main()
{
int i,j,n;
for(int i=; i<Max; i++)
ans[i]=;
memset(tans,,sizeof(tans));
for(int k=; k<=; k++)
{
for(i=; i<Max; i++)
{
for(j=; i+j<Max; j+=k)
{
tans[i+j]+=ans[i];
}
}
for(i=; i<Max; i++)
{
ans[i]=tans[i];
tans[i]=;
}
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",ans[n]);
}
return ;
}
hdu 1284完全背包的更多相关文章
- HDU 1284 钱币兑换问题(全然背包:入门题)
HDU 1284 钱币兑换问题(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1284 题意: 在一个国家仅有1分,2分.3分硬币,将钱N ( ...
- HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包)
HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包) 题意分析 裸的完全背包问题 代码总览 #include <iostream> #include <cstdio> ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- hdu 5445 多重背包
Food Problem Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- hdu 1203 01背包 I need a offer
hdu 1203 01背包 I need a offer 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 题目大意:给你每个学校得到offe ...
- HDU 1284 钱币兑换问题 母函数、DP
题目链接:HDU 1284 钱币兑换问题 钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- hdu 1284 钱币兑换问题 完全背包
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1284 递推公式:dp[i] = sum(dp[i], dp[i-C]) /* 钱币兑换问题 Time ...
- HDU 1284(钱币兑换 背包/母函数)
与 HDU 1028 相似的题目. 方法一:完全背包. 限制条件:硬币总值不超过 n. 目标:求出组合种数. 令 dp[ i ][ j ] == x 表示用前 i 种硬币组合价值为 j 的钱共 x 种 ...
- 【完全背包】HDU 1284 钱币兑换问题
Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有一个正整数N,N小于32768. Out ...
随机推荐
- sd_cms置顶新闻,背景颜色突击显示
维护之前的一个客户网站,使用的是sd_cms系统,因为好久没有维护了,看到这网站的时候,真不敢相信,自己也曾做出过这样的网站. 客户要求置顶新闻始终在最上面,有背景颜色突击显示. 找到对应的代码,修改 ...
- 0728pm 控制器
- [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]
这是"AngularJS - 七步从菜鸟到专家"系列的第三篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.第二篇我们讨论了scope和 $scope 的功能. 通过这整个系列的教程 ...
- mysql中的高级查询
以前学习的查询语法: select 字段名 from 表名 where 条件 其实,查询的语法变化很多: 1. select 可以查询表达式, 表达式就是 运算符+操作数. 比如 1 + 1 2 * ...
- android 的touch event分析
android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN ...
- I hate it
Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老 ...
- 使用my exclipse对数据库进行操作(2)
二.增加 public static void main(String[] args) { //TODO Auto-generated method stub //4.用户输入需要添加的项目 ...
- hdu 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
- 抓发请求&设置默认工程
反向代理:外网服务器接受来自Internet的请求,转发到内网服务器. iptables转发:只有root才能使用1024以下的端口,域名的默认端口为80,一般不会给开发者提供root密码的.一台优质 ...
- MYSQL基础--学习笔记
最近一段时间,系统的学习了下mysql相关知识,当然都是比较基础的,现在贴出来,以供参考备忘--帅帅的小猪猪 创建用户:CREATE USER 'sampadm'@'localhost' IDENTI ...