Dollar Dayz POJ - 3181】的更多相关文章

一道高精度DP 题目大意,换工具,有m块钱,有k种价值的物品,(1...k),求一共有多少种换法 这一题就是完全背包,现在这种完全背包对我来说就是水题了, 状态转移方程闭着眼睛写dp[j]+=dp[j-i] 可是这一题还没完,数据量太大,会出现溢出的情况,这一题有一点高精度的要求,要求也挺简单的,两个long long就可以了 状态转移方程变为: dpl[j]+=dpl[j-i]; dph[j]+=dph[j-i]+f(j)  当dpl[j]>Up时,f(j)=1,且dpl[j]=dp[j]-U…
解法 完全背包+大数...不想写大数了放个python得了 代码 dp=[0 for i in range(2000)] n,k=map(int,input().split()) num=[i for i in range(1,k+1)] dp[0]=1 for i in range(k): for j in range(num[i],n+1): dp[j]+=dp[j-num[i]] print(dp[n])…
POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自是1美元,2美元-K美元且能够无限使用,问你用上面K种硬币构成n美元的话有多少种方法? 分析: 本题是一道明显的全然背包问题, 只是本题还能够换一种方法来看: 整数n由前K个自然数构造, 一共同拥有多少种方法? (尽管本题要用到高精度加法, 可是非常easy, 不要被吓到哦) 首先是DP部分: 令dp[i][…
首先是 Uva 147:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=83 细心看完这题后发现还是完全背包,只不过需要对浮点数处理一下.即把所有硬币的面值都乘以100,化为整数,对输入的数据也作同样的处理,然后就是套完全背包的模板了,在输出时还要用格式和精度来卡一卡你……一开始我没想到用printf可以的,于是百度了cout的输出格式控制,…
Dollar Dayz Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5419   Accepted: 2054 Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on sale. During his first visit, the tools are sell…
Dollar Dayz Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5655   Accepted: 2125 Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on sale. During his first visit, the tools are sell…
http://poj.org/problem?id=3181 Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on sale. During his first visit, the tools are selling variously for $1, $2, and $3. Farmer John has exactly $5 to…
题目链接:http://poj.org/problem?id=3181 题目大意:用1,2...K元的硬币,凑成N元的方案数. Sample Input 5 3 Sample Output 5 分析:这不是母函数是什么,不管你信不信,反正我是信了. 之前有过一篇,讲母函数的动态规划做法http://www.cnblogs.com/acm-bingzi/archive/2013/04/30/3051725.html 这道题目,坑就坑在高精度上了,刚开始怎么也没想到,而且做法也很奇特.就是将2个lo…
题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K.称为整数N的K划分. 递归:直接看代码: 动态规划:dp[i][j]:=将整数i做j划分的方法数. dp[i][j]=dp[i][i]: if(j>i) dp[i][j]=dp[i-j][j]+dp[i][j-1]://分j出现不出现两种情况 dp[i][j]=dp[i][j-1]+1:if(i==j)//单独的一个j和另外一种不包含j #include <iostream&…
f[i][j]=f[i-j][j]+f[i][j-1],结果很大需要高精度. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<sstream> #i…
题意:给出两个数,n,m,问1~m中的数组成n,有多少种方法? 这题其实就相当于 UVA 674 Coin Change,求解一样 只不过数据很大,需要用到高精度运算... 后来还看了网上别人的解法,是将大数转化成高位和低位两部分处理 代码一:用数组存储数据的每个位 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std…
题意:给定一个数p,要求用K种币值分别为1,2,3...K的硬币组成p,问方案数,1,2,2和2,2,1算一种方案即与顺序无关,n <= 1000,k <= 100// 用完全背包做了 这题也是母函数题目了 #include <iostream> #include <algorithm> #include <queue> #include <math.h> #include <stdio.h> #include <string.…
这DP虽然简单 但是思考一下还是挺好的 题意是 1,2,3,4....k 用加法凑成N 每个数可取不限个数 令dp[i][j] 表示前i种数凑成j的方案数 然后dp[i][j] = dp[i - 1][j] + dp[i - 1][j - i] + dp[i - 1][j - 2 * i]........dp[i - 1][j - k * i] 这样子 然后代码如下,由于结果要爆long long ,所以用两个long long 数存高位和低位 #include <iostream> #inc…
可能nyist看见加的背包专题我老去凑热闹,觉得太便宜我了.他们新加的搜索专题居然有密码. 都是兄弟院校嘛!何必那么小气. 回到正题,跟我写的上一篇关于求组成方案的背包思路基本一样,无非就是一个二维费用的背包换成了完全背包.如果说题目有什么亮点的话,那就是大数了.第一遍写的时候瞎了我的狗眼竟然没注意到,我的1A就这么没了. 关于组成方案的叙述,还是看我之前那篇结题报告吧:关于背包组成方案的讨论 #include<stdio.h> #include<string.h> #define…
题意: 给出两个数,n,m,问m以内的整数有多少种组成n的方法完全背包+大数划分 思路: dp[i][j] := 用i种价格配出金额j的方案数. 那么dp[i][0] = 1,使用任何价格配出金额0的方案个数都是1(什么都不用). 递推关系式: 实际上是完全背包问题,只是状态转移方程形式有所不同,不过状态转移的方向是完全相同的. dp[i][j] = dp[i – 1][j] + dp[i – 1][j – i] + dp[i – 1][j – 2 * i] + … + dp[i – 1][0]…
01全然背包问题. 主要是求有多少种组合.二维dp做的人多了,这里使用一维dp就能够了. 一维的转换方程:dp[j] = dp[j-i] + dp[j];当中i代表重量,j代表当前背包容量. 意思就是dp[j-i] 代表j-i背包重量的时候最多的组合数,那么假设到了背包容量为j的时候,就是能够把第i个物品装进背包,那么就有dp[j-i]种装法, 假设没有i物品之前.那么容量为j的时候组合数是dp[j]. 那么当有i物品,且容量为j的时候,那么组合数就是dp[j-i] + dp[j]; 二维能够转…
题意:John有N美元,有价格为1~K的工具,可以买的个数不限,问1~K组合出N的方案数. f[i = 第i中工具][j = 花费为j] = 方案数. f[i][j] = sigma{ f[i-1][r+k*i] , k ≤ j/i } = f[i][j-i] + f[i-1][j] (优化 这题主要的问题是答案会爆long long. 用两个long long 拼一下就好. #include<cstdio> #include<iostream> #include<strin…
题意 : 给出目标金额 N ,问你用面额 1~K 拼成 N 的方案有多少种 分析 : 完全背包的裸题,完全背包在 DP 的过程中实际就是列举不同的装填方案数来获取最值的 故状态转移方程为 dp[i] += dp[j-w[i]] 但是这题怎么可能那么简单呢! N 和 K 的上限导致答案过大,需要使用高精度加法来完成 所以无耻的用 JAVA 来搞定了 import java.io.*; import java.lang.reflect.Array; import java.util.*; impor…
题意:给出整数n和k,n代表拥有的钱数量,k代表有k种工具,其价钱分别为1~k.求n元能有多少种购买的方案. 思路:k最大有100,数量过大,要用大数.其他的基本和完全背包一样. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; , N=; ], n, k; struct bign { //请先设置常数N作为缓冲…
link:http://poj.org/problem?id=3181 本来很常规的一道完全背包,比较有意思的一点是,结果会超int,更有意思的解决方法是,不用高精度,用两个整型的拼接起来就行了.ORZ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #inclu…
http://poj.org/problem?id=3181 这个题目一开始就能看出来是个dp问题,但是我并没有一开始就看出来是一个完全背包为题,只是想着根据以前的方法,这个问题应该是可以找到规律的,但是,还是被坑了,这还是一个大数问题! 首先我膜拜一下hankcs大神的: /////////////////////////////////////////////////////////// #include <iostream> using namespace std; unsigned l…
Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on sale. During his first visit, the tools are selling variously for $1, $2, and $3. Farmer John has exactly $5 to spend. He can buy 5 tools at $1…
http://www.lydsy.com/JudgeOnline/problem.php?id=1655 背包就没什么好说的了,裸的完全背包.. 但是我一开始交开了ull都wa了T_T.. 精度太大... .. 打高精度吧.. #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algori…
Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on sale. During his first visit, the tools are selling variously for $1, $2, and $3. Farmer John has exactly $5 to spend. He can buy 5 tools at $1…
做完这道题,心里五味陈杂,明明是最水的一道题,我却做了最长的时间. 题意是求用1-k的和表示n的方案数. 显然是个计数dp,但我不会.思考半小时未果. 然后找尹鹏哲,他给我讲了个错的dp方程,结果调试半小时未果,看了别人的代码,发现别人虽然滚了一维,但和尹鹏哲讲的十分相似. 后来我又想了想,觉得尹鹏哲的dp方程有点问题,自己改了一下,但当时并没有验证.实际上,由于对题解方程错误理解,当时我已经形成了思维定势,认为方程是对的,却没有发现方程中一个十分微小但十分致命的错误--我把完全背包和01背包的…
Description 约翰到奶牛商场里买工具.商场里有K(1≤K≤100).种工具,价格分别为1,2,-,K美元.约翰手里有N(1≤N≤1000)美元,必须花完.那他有多少种购买的组合呢? Input A single line with two space-separated integers: N and K. 仅一行,输入N,K. Output A single line with a single integer that is the number of unique ways FJ…
居然要用高精度! 懒得operator了,转移是裸的完全背包 #include<iostream> #include<cstdio> using namespace std; int n,k,f[1005][45]; int read() { int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<…
思路: f[i]表示还剩i空间的方案数 套个高精 (网上有人把它拆成了两个long long) 其实这道题的高精并不难写-.. //By SiriusRen #include <cstdio> using namespace std; int n,k,f[1111][53],flag; int main(){ scanf("%d%d",&n,&k); f[n][0]=1; for(int i=1;i<=k;i++) for(int j=n-i;j>…
POJ 1852 Ants POJ 2386 Lake Counting POJ 1979 Red and Black AOJ 0118 Property Distribution AOJ 0333 Ball POJ 3009 Curling 2.0 AOJ 0558 Cheese POJ 3669 Meteor Shower AOJ 0121 Seven Puzzle POJ 2718 Smallest Difference POJ 3187 Backward Digit Sums POJ 3…
POJ1742 http://poj.org/problem?id=1742 题意 有n种面额的硬币,面额个数分别为Ai.Ci,求最多能搭配出几种不超过m的金额? 思路 据说这是传说中的男人8题呢,对时间和空间复杂度要求都挺高的. 朴素DP三重循环比较容易想到,但显而易见会TLE. 这里由于dp数组记录的是一个bool值(是否能搭配出某金额),记录的信息较少,因而存在浪费.优化思路是dp[i][j]记录用前i种数加和得到j时第i种数最多能剩余多少个(不能加和得到的情况下为-1).但二维dp数组的…