题解 【Uva】硬币问题】的更多相关文章

开始眨眼一看怎么也不像是网络流的一道题,再怎么看也觉得像是搜索.不过虽然这道题数据范围很小,但也不至于搜索也是可以随随便便就可以过的.(不过这道题应该是special judge,因为一题可以多解而且题目中然而并没有什么要求,所以说可以考虑思考一下这道题有木有什么"套路"之类的通法) 比如说有这么一组数据 原矩阵 输入 然后将每一行的和写在每一列对应的行上(很明显有问题) 然后调整,为了简便先每个向右挪个1(保障不会出现0什么之类的),接着就随便怎么移都可以,只要第一列满足且每一行的和…
在游戏的任何时刻剩余的都是1 - n中的一个连续子序列.所以可以用dp[i][j]表示在第i个数到第j个数中取数,先手的玩家得到的最大的分值.因为两个人都很聪明,所以等于自己和自己下.基本上每次就都是给对方留下一个烂棋局,所以上一个棋局应该是很优的,所以应该选择上一个棋局的最小值转移到当前棋局.所以得出了下面的方程dp[i][j] = min{dp[i + k][j](0 < k <= j - i)) dp[i][j - k](1 <= k <= j - i), 0}. 但是发现d…
讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对应的位置都是唯一的,就用第一个序列的元素对第二个序列的元素进行重新编号,记录它们在第一个序列中出现的位置(如果不存在就随便记一个不能达到的值),不存在的话就说明它们对LCS没有贡献.那么看张图: 如果不能明白,那..看张反例: 有没有发现LCS的长度就是第二个序列的LIS的长度? /** * uva…
solutions 题面(loj) 题面(luogu) 这个题吧是我很久很久以前留下的坑了,到了今天才补好.(是不是太菜了) 暴力 这个和之前的题解一样,确实可以用 trie 树,这复杂度是\(\mathcal{O(n^3m^3)}\). 您就是初学OI,也不应该看到数据范围之后想到这样的复杂度. 所以这个暴力就直接舍弃吧. 但是如果别的题用到了,还是可以试一试的,毕竟考试的时候部分分还是比较重要的. 正解 不知道咱也不知道为啥这个题的思路可以如此的妙. 首先考虑,每一个合法的能够让一个玩家赢的…
本题的数学模型是:把\(\mathcal{n}\)个集合\(\mathcal{P1,P2,...,Pn}\)分成尽量多组,使得每组中所以集合的并集等于全集.这里集合\(\mathcal{Pi}\)就是计算机\(\mathcal{i}\)及其相邻计算机的集合,每组对应于题目中的一项服务. 注意到\(\mathcal{n}\)很小,可以套用<算法竞赛>里面提到的二进制法表示这些集合,即在代码中, 每个集合\(\mathcal{Pi}\)实际上是一个非负整数.输入部分代码如下: for(int i=…
Description Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 <= K <= 16), each with value in the range 1..100,000,000. FJ would like to make a sequence of N purchases (1 <= N <= 100,000), where th…
[BZOJ1434][ZJOI2009]染色游戏(博弈论) 题面 BZOJ 洛谷 题解 翻硬币的游戏我似乎原来在博客里面提到过,对于这类问题,当前局面的\(SG\)函数就是所有反面朝上的硬币单一存在时的\(SG\)函数的异或和.现在要考虑的是如何求解单一硬币存在于场上时的\(SG\)函数,这种东西....打表吧... #include<iostream> #include<cstdio> #include<cmath> using namespace std; inli…
[Uva]硬币问题 Description 有n种硬币,面值分别为v1, v2, ..., vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值. Input 第一行两个整数,n,S(1≤n≤100, 0≤S≤100000). 第二行n个整数vi-1...n(1≤vi≤S). Output 第一行两个整数,分别表示硬币数目的最小值 a 和最大值 b .无解则输出 -1 . 第二行 a 个整数分别表示使用的是第几种硬币. 第三行 b 个整数分…
P1071 - [Uva]硬币问题 Description 有n种硬币,面值分别为v1, v2, ..., vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值. Input 第一行两个整数,n,S(1≤n≤100, 0≤S≤100000).第二行n个整数vi-1...n(1≤vi≤S). Output 第一行两个整数,分别表示硬币数目的最小值 a 和最大值 b .无解则输出 -1 .第二行 a 个整数分别表示使用的是第几种硬币.第三行 b…
#include<bits/stdc++.h> using namespace std; int main() { unsigned ]; memset(dp,,sizeof(dp)); dp[]=; ;i<=;i++) ;j++) dp[j]=dp[j]+dp[j-i]; int n; while((scanf("%d",&n))!=EOF) { printf("%I64d\n",dp[n]); } ; ; } 这两道题基本思路是一样的,…