统计硬币 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 ...
随机推荐
- Spark SQL结构化数据处理
Spark SQL是Spark框架的重要组成部分, 主要用于结构化数据处理和对Spark数据执行类SQL的查询. DataFrame是一个分布式的,按照命名列的形式组织的数据集合. 一张SQL数据表可 ...
- Django之FBV与CBV
一.FBV与CBV FBV(function based views),即基于函数的视图:CBV(class based views),即基于类的视图,也是基于对象的视图.当看到这个解释时,我是很萌的 ...
- T-SQL :TOP和OFFSET-FETCH筛选 (五)
通过were和having条件可以对数据进行筛选,那么如何通过排序对数据进行筛选呢? 1.TOP筛选 用于限制查询返回行数或者行数的百分比. 例如 我们对订单表筛选最近产生的订单5条 ) orderi ...
- C#基础 阶段总结
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
- 以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要。 这一篇文章主要关于java多线程一些常见的疑惑点。因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,嘻嘻嘻、大家可以去参考一些那些书籍。我这个文章主要关于实际的一些问题。同时也算是我以后复习的资料吧,。还请大家多多指教。 同时希望多结交一些技术上的朋友。谢谢。
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 以下就是我们常见的问题了: 1. 为什么我们不能直接调用run()方法呢? 我的理解是:线程的运行 ...
- matlab的解方程的例子
syms x y z=exp(2*x+y)+cos(3*x*y)-exp(1)-1; zz=subs(z,x,1) solve(zz)
- 10个最佳ES6特性
译者按: 人生苦短,我用ES6. 原文: Top 10 ES6 Features Every Busy JavaScript Developer Must Know 译者: Fundebug 为了保证 ...
- python爬虫入门---第三篇:自动下载图片
适用的图片网站:美桌 源代码: import requests import re import urllib from bs4 import BeautifulSoup def get_html_t ...
- 微信小程序实现验证码倒计时效果
效果图 wxml <input class='input-pwd' placeholder="新密码" placeholder-style='color: #000' pas ...
- loadrunner 运行脚本-Run-time Settings-Browser Enmulation设置详解
运行脚本-Run-time Settings-Browser Enmulation设置详解 by:授客 QQ:1033553122 浏览器模拟 所有Internet Vuser Header包含一个标 ...