USACO Section2.3 Money Systems 解题报告 【icedream61】
money解题报告
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
你有V种硬币,每种硬币面值都告诉你。
请问,用它们凑出面值N,总共有多少种情况?
【数据范围】
1<=V<=25
1<=N<=10000
数据保证,总情况数不超过long long。
【输入格式】
第一行给出V和N。
后面给出所有V种面值。
【输入样例】
3 10
1 2 5
【输出样例】
10
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
完全背包问题。
之前写过背包问题的总结,不懂的同学可以去看我之前的博文:“背包问题基本解法 —— 《背包九讲》笔记”。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
开始对这题的数据范围并没有什么认识,于是枚举过了前7个点,第8个点超时。
自己调试了下,发现整数拆分竟然有如此多种情况。于是换用神奇的背包做了。
------------------------------------------------------------------------------------------------------------------------------------------------
【代码(注意,本题给出了两个版本的代码:背包算法和枚举法。)】
AC版本,即背包算法。
/*
ID: icedrea1
PROB: money
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; const int maxv = +;
const int maxn = +;
bool b[maxn];
int d[maxv]; int c[maxv];
long long cnt[maxn]; int main()
{
ifstream in("money.in");
ofstream out("money.out"); int V,N; in>>V>>N;
for(int i=,x;i<=V;++i) { in>>x; if(x<=N) b[x]=true; }
V=;
for(int i=;i<=N;++i)
if(b[i]) d[++V]=i; // 保证输入硬币是从小到大的 cnt[]=;
for(int i=;i<=V;++i)
for(int j=d[i];j<=N;++j) cnt[j]+=cnt[j-d[i]]; out<<cnt[N]<<endl; in.close();
out.close();
return ;
}
只过7个点的版本,即枚举法。
/*
ID: icedrea1
PROB: money
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; const int maxv = +;
const int maxn = +;
bool b[maxn];
int d[maxv]; int c[maxv];
long long ts; long long count(int n,int v) // 还剩n元,要决定d[v]的个数
{
//cout<<n<<' '<<v<<endl; //cin.get();
++ts; //if(ts%100000000==0) cout<<ts<<endl;
if(n==) return ;
if(v==) return ;
long long s=;
for(int i=;d[v]*i<=n;++i)
{
c[v]=i; s+=count(n-d[v]*i,v-);
}
return s;
} int main()
{
ifstream in("money.in");
ofstream out("money.out"); int V,N; in>>V>>N;
for(int i=,x;i<=V;++i) { in>>x; if(x<=N) b[x]=true; }
V=;
for(int i=;i<=N;++i)
if(b[i]) d[++V]=i; // 保证输入硬币是从小到大的 cout<<count(N,V)<<endl;
cout<<"ts="<<ts<<endl; in.close();
out.close();
return ;
}
USACO Section2.3 Money Systems 解题报告 【icedream61】的更多相关文章
- USACO Section2.1 The Castle 解题报告
castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section2.1 Ordered Fractions 解题报告
frac1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】
holstein解题报告 --------------------------------------------------------------------------------------- ...
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.3 Controlling Companies 解题报告 【icedream61】
concom解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Zero Sum 解题报告 【icedream61】
zerosum解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】
nocows解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Longest Prefix 解题报告 【icedream61】
prefix解题报告------------------------------------------------------------------------------------------ ...
随机推荐
- MVC:控制器名与被调用模型名称发生冲突的解决方案
控制器名与被调用的模型名发生了冲突: 有两种解决方案: (1)将被调用的模型类名进行修改 例如: (2)对被调用的模型进行起一个别名 以上 加油ヾ(◍°∇°◍)ノ゙
- 概念:静态static相关知识
在面向对象中,有‘静态’概念,通过关键字static进行说明, 例如: 静态属性:public static $name = '小仓鼠' 静态方法:public static function Nam ...
- 双网卡(一外一内)都启用,将内网卡默认网关去除即可正常连接Internet
- HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序
HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不 ...
- Poj(1182),种类并查集
题目链接:http://poj.org/problem?id=1182 再次熟练种类并查集,又积累点经验,和技巧,rank 0 2 1 先计算father[x] ,再更新rank[x]; #inclu ...
- AJAX(三):GET与POST
1.使用场景get是最常见的请求类型,最常用于向服务器查询某些信息仅次于get的是post请求,通常用于向服务器发送应该被保存的数据 2.使用get请求经常会发生一个错误,就是查询字符串的个是有问题, ...
- Vue路由讲解
1>router-link和router-view组件 2>路由配置 a.动态路由 import Home from "@/views/Home.vue"; expor ...
- web的监听器,你需要知道这些...
一.简介 Listener是Servlet规范的另一个高级特性,它用于监听java web程序的事件,例如创建.修改.删除session,request,context等,并触发相应的处理事件,这个处 ...
- SpringBoot学习10:springboot整合mybatis
需求:通过使用 SpringBoot+SpringMVC+MyBatis 整合实现一个对数据库中的 t_user 表的 CRUD 的操作 1.创建maven项目,添加项目所需依赖 <!--spr ...
- Xcode 中 pch 文件配置 - iOS
一.简介 首先 pch 文件(即:Prefix Header)是一种预编译文件,在 Xcode 6 之前创建新的工程则会自动将该文件一起创建出来,但在 Xcode 6 之后苹果官方则默认将自动创建的方 ...