DP: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]-Up;

  而且更关键的是,这一题根本就是个错题,因为低位根本不需要加前导0就给过,加了就tle

  

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #define UP 1000000000000000000LL
 5 #define CUT 18
 6
 7 static long long dpl[1001];
 8 static long long dph[1001];
 9
10 int main(void)
11 {
12     int sum, num, i, j;
13     long long k, tmp;
14
15     while (~scanf("%d%d", &sum, &num))
16     {
17         dpl[0] = 1;
18         for (i = 1; i <= num; i++)
19         {
20             for (j = i; j <= sum; j++)
21             {
22                 dpl[j] = dpl[j] + dpl[j - i];
23                 dph[j] = dph[j] + dph[j - i];
24                 if (dpl[j] >= UP)
25                 {
26                     dph[j]++;
27                     dpl[j] = dpl[j] - UP;
28                 }
29             }
30         }
31         if (dph[sum] != 0)
32             printf("%lld", dph[sum]);
33         printf("%lld\n", dpl[sum]);
34     }
35     return 0;
36 }
时间: 2024-10-13 06:15:14

DP:Dollar Dayz(POJ 3181)的相关文章

Dollar Dayz POJ - 3181

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 each or 1 t

POJ 3181 Dollar Dayz(完全背包+简单高精度加法)

POJ 3181 Dollar Dayz(完全背包+简单高精度加法) http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币分别是1美元,2美元-K美元且可以无限使用,问你用上面K种硬币构成n美元的话有多少种方法? 分析: 本题是一道明显的完全背包问题, 不过本题还可以换一种方法来看: 整数n由前K个自然数构造, 一共有多少种方法? (虽然本题要用到高精度加法, 但是很简单, 不要被吓到哦) 首先是DP部分: 令dp[i][j]==x 表示由前i种硬币构成j

POJ 3181 Dollar Dayz &amp;&amp; Uva 147 Dollars(完全背包)

首先是 Uva 147:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=83 细心看完这题后发现还是完全背包,只不过需要对浮点数处理一下.即把所有硬币的面值都乘以100,化为整数,对输入的数据也作同样的处理,然后就是套完全背包的模板了,在输出时还要用格式和精度来卡一卡你……一开始我没想到用printf可以的,于是百度了cout的输出格式控制,

poj3181 Dollar Dayz (DP+大数)

Dollar Dayz Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3181 Appoint description: System Crawler (2016-05-27) Description Farmer John goes to Dollar Da

Dollar Dayz (大数dp fuck!不是多组数据!!)

Dollar Dayz Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main Prev Submit Status Statistics Discuss Next Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on s

POJ3181 Dollar Dayz 【母函数】+【高精度】

Dollar Dayz Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4204   Accepted: 1635 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

poj 3181 Dollar Dayz DP

题意:给你一个n,还有k,求问有多少种数字组合,能够使得数字之和为n,这些数字的范围是1到k. 如,给你n=4, k=2.那么 1+1+1+1=4, 1+1+2=4,2+2=4,四种组合. 思路:完全背包,可以设d[i][j]代表从i个数字相加和为j的组合数. 那么,可以考虑把这些组合数分为,有数字i和没有数字i,那么没有数字i的组合数就为d[i-1][j],有数字i的组合数就为d[i][j-i](可以在这些组合里面加上1个i). 所以,转移方程可以写成d[i][j] = d[i-1][j] +

(完全背包 大数)Dollar Dayz (POJ 3181)

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

POJ 3181 Dollar Dayz 【完全背包】

题意: 给出两个数,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]