统计硬币 HDU - 2566 (三种解法:线性代数解法,背包解法,奇思妙想解法 >_< )
题号放这里自己去找吧。
HDU-2566
这题最开始用的dp,然后,被同学用奇思妙想过了。 >_< 开心!
-_- !! 然后,被我线性代数给过了。
方法一:dp
将其化为01背包,只不过每种物品可以重复取的各数和为n就行。
好了,代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int dp[][];
int w[]={,,,};
int main()
{
int k, n, v;
cin>>k;
while(k--)
{
memset(dp, ,sizeof(dp));
cin>>n>>v;
dp[][]=;
for(int i=;i<=;i++)
{
for(int k=;k<=n;k++)
for(int j=w[i]; j<=v;j++)
dp[k][j]+=dp[k-][j-w[i]];
}
cout<<dp[n][v]<<endl;
}
}
哎呀,背包都差不多忘了。得复习了。
方法二:
因为 2 2 2 2 可以转化为 1 1 1 5啊;也就是说找最多的2的方案,当然余出来的1是不可组的。当然,最多2的情况来转化1115的情况
#include<cstdio> int main(){
int T;
scanf("%d",&T);
while(T--){
int n, m;
int a=,b=,c=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
for(int j=;j+i<=n;j++){
if(j*+i+(n-j-i)* == m){
b = j;
i = n;
break;
}
}
}
printf("%d\n",+b/);
}
return ;
}
感觉这个方法,我也不是很清楚。可能没说明白。
方法三:
设a , b, c分别是1元 2元 5元的个数,那么也就是a+b+c=n和a+2*b+5*c=m这样就构成了一个矩阵方程。直接解开这个矩阵方程就行啦。
当然,还有更加明白的解释方法。一只3个未知数和两个约数条件,那么我们可以利用高中学过的消元,用一个未知数表示其他两个未知数。
即得到b = -4 * c + m - n;
a = 3 * c+ 2 * n - m;这两个公式,然后直接枚举c就可以了,注意的是,a+b+c=n一定是成立的。但是,由于数学公式要满足实际问题的需要
我们只能取a, b大于等于0的情况。
#include<cstdio> int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, m;
scanf("%d%d", &n, &m);
int a, b, c = ;
int ans = ;
while ()
{
b = - * c + m - n;
a = * c+ * n - m;
if (b>=&&a>=)ans++;
else if (b < ) break;
c++;
}
printf("%d\n", ans);
}
return ;
}
统计硬币 HDU - 2566 (三种解法:线性代数解法,背包解法,奇思妙想解法 >_< )的更多相关文章
- hdu 2566 统计硬币
http://acm.hdu.edu.cn/showproblem.php?pid=2566 假设一堆由1分.2分.5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量 ...
- LeetCode算法题-Move Zeroes(Java实现-三种解法)
这是悦乐书的第201次更新,第211篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第67题(顺位题号是283).给定一个数组nums,写一个函数将所有0移动到它的末尾,同 ...
- LeetCode算法题-First Bad Version(Java实现-三种解法)
这是悦乐书的第200次更新,第210篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第66题(顺位题号是278).您是产品经理,目前领导团队开发新产品.不幸的是,您产品的最 ...
- SQL Server中的三种Join方式
1.测试数据准备 参考:Sql Server中的表访问方式Table Scan, Index Scan, Index Seek 这篇博客中的实验数据准备.这两篇博客使用了相同的实验数据. 2.SQ ...
- 简谈百度坐标反转至WGS84的三种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...
- Kendall’s tau-b,pearson、spearman三种相关性的区别(有空整理信息检索评价指标)
同样可参考: http://blog.csdn.net/wsywl/article/details/5889419 http://wenku.baidu.com/link?url=pEBtVQFzTx ...
- 链接属性rel=’external’、rel=’nofollow’、rel=’external nofollow’三种写法的区别
链接属性rel='external'.rel='nofollow'.rel='external nofollow'三种写法的区别 大家应该都知道rel='nofllow'的作用,它是告诉搜索引擎, ...
- Excel应该这么玩——5、三种数据:Excel也是系统
Excel最常用的功能就是记录数据,把数据按照行列记录下来.这部分数据是源数据,是业务活动中最原始的流水账,作为后续操作的依据.为了从源数据中得出一定的结论,需要对源数据进行分析得出报表数据. ...
- Sort merge join、Nested loops、Hash join(三种连接类型)
目前为止,典型的连接类型有3种: Sort merge join(SMJ排序-合并连接):首先生产driving table需要的数据,然后对这些数据按照连接操作关联列进行排序:然后生产probed ...
随机推荐
- 复制神器Ditto使用方法详细说明
1.普通的粘贴快捷键设置: 我设置成ctrl+1 --> ctrl+10.但是注意,有些程序里ctrl有特殊功能,这样ctrl+[0-9]键会出现问题,所以建议将粘贴快捷键设置的复杂一点,例如c ...
- centos6.5修改yum安装的mysql默认目录
0.说明 Linux下更改yum默认安装的mysql路径datadir. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql. 假如要把MySQL目录移到/home/data ...
- 初识SqlLite ---.net连接数据库
Sqlite 是一款轻量级的关系型数据库,以小巧和嵌入式闻名.以前只是听说,现在终于忍不住要尝试下.本文的初衷是为.net平台的使用者提供帮助. Sqlite有专门为VS2010开发的程序包,大家可以 ...
- 浅谈websocket和c# socket(新手篇)
周末放假没带电脑所以今天分享质量不高,手机没有那些样式看起来可能没有那么方便,今天主要分享一下websocket. (赶紧拿小本本记下来) websocket 你发现是一个组合单词web socket ...
- 数据结构-Python3.7<三>
上一篇:流程控制-Python<二> 因为列表具有pop.append.insert方法,因此列表可以当作堆.栈使用.由于性能问题,不建议当作堆.(堆:队列优先,先进先出(FIFO—fir ...
- 【操作系统】二、JVM线程与Linux内核线程的映射
Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是 ...
- 【Java基础】13、抽象方法不能是static或native或synchroniz 原因及误解
在网上看到过这么一篇文章,是关于抽象方法不能是static或native或synchroniz 的原因.其中提到了这些关键字的意义以及与 abstract 关键字的冲突,大体内容如下: 1.abstr ...
- Nginx学习笔记(一)---Linux下安装Nginx
1.Nginx介绍 (来自百度,相当之抽象,主要看后面看实例) 2.准备工作 2.1 Nginx安装 官方网站:http://nginx.org/ 2.2.Linux安装 安装工程可参考博客https ...
- js keyup、keypress和keydown事件
js keyup.keypress和keydown事件都是有关于键盘的事件 当一个按键被pressed 或released在每一个现代浏览器中,都可能有三种客户端事件. keydown event k ...
- Harbor 搭建
环境:centos7.4 docker-ce 18.06.0-ce docker-compose version 1.18.0 harbor 版本: 1.5.2 harbor 安装参考 https:/ ...