题意:给出两个数,n,m,问1~m中的数组成n,有多少种方法?

  这题其实就相当于 UVA 674 Coin Change,求解一样
  只不过数据很大,需要用到高精度运算。。。

后来还看了网上别人的解法,是将大数转化成高位和低位两部分处理

代码一:用数组存储数据的每个位

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
const int maxn=;
long long dp[maxn][]; //增加一维存储每一位的数
int n,k;
int main() { while(scanf("%d%d",&n,&k)!=EOF) {
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=; i<=k; i++) {
for(int j=i; j<maxn; j++) {
//原本就直接写了dp[j]+=dp[j-i],不WA才怪了。。。
for(int z=;z<;z++){
dp[j][z]=dp[j][z]+dp[j-i][z];
if(dp[j][z]>){
dp[j][z]-=;
dp[j][z+]++;
}
}
}
}
int idx=;
while(dp[n][idx]==)
idx--;
for(int i=idx;i>=;i--)
printf("%d",dp[n][i]);
printf("\n");
}
return ;
}

代码二:将大数分成两部分,高位部分和低位部分

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
const long long mod=;
const int maxn=;
long long dphigh[maxn]; //一个数的高位部分
long long dplow[maxn]; //一个数的低位部分
int n,k;
int main() { while(scanf("%d%d",&n,&k)!=EOF) {
memset(dphigh,,sizeof(dphigh));
memset(dplow,,sizeof(dplow));
dplow[]=;
for(int i=; i<=k; i++) {
for(int j=i; j<maxn; j++) {
dphigh[j]+=dphigh[j-i];
dplow[j]+=dplow[j-i];
dphigh[j]+=(dplow[j])/mod;
dplow[j]=dplow[j]%mod;
}
}
if(dphigh[n])
printf("%I64d",dphigh[n]);
printf("%I64d\n",dplow[n]);
}
return ;
}

POJ 3181 Dollar Dayz (完全背包,大数据运算)的更多相关文章

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

    POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自 ...

  2. POJ 3181 Dollar Dayz ( 完全背包 && 大数高精度 )

    题意 : 给出目标金额 N ,问你用面额 1~K 拼成 N 的方案有多少种 分析 : 完全背包的裸题,完全背包在 DP 的过程中实际就是列举不同的装填方案数来获取最值的 故状态转移方程为 dp[i] ...

  3. POJ 3181 Dollar Dayz && Uva 147 Dollars(完全背包)

    首先是 Uva 147:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_p ...

  4. poj 3181 Dollar Dayz(完全背包)

    Dollar Dayz Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5419   Accepted: 2054 Descr ...

  5. poj 3181 Dollar Dayz(求组成方案的背包+大数)

    可能nyist看见加的背包专题我老去凑热闹,觉得太便宜我了.他们新加的搜索专题居然有密码. 都是兄弟院校嘛!何必那么小气. 回到正题,跟我写的上一篇关于求组成方案的背包思路基本一样,无非就是一个二维费 ...

  6. POJ 3181 Dollar Dayz 【完全背包】

    题意: 给出两个数,n,m,问m以内的整数有多少种组成n的方法完全背包+大数划分 思路: dp[i][j] := 用i种价格配出金额j的方案数. 那么dp[i][0] = 1,使用任何价格配出金额0的 ...

  7. POJ 3181 Dollar Dayz(高精度 动态规划)

    题目链接:http://poj.org/problem?id=3181 题目大意:用1,2...K元的硬币,凑成N元的方案数. Sample Input 5 3 Sample Output 5 分析: ...

  8. poj 3181 Dollar Dayz (整数划分问题---递归+DP)

    题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K.称为整数N的K划分. 递归:直接看代码: 动态规划:dp[i][j]:=将整数i ...

  9. POJ 3181 Dollar Dayz 01全然背包问题

    01全然背包问题. 主要是求有多少种组合.二维dp做的人多了,这里使用一维dp就能够了. 一维的转换方程:dp[j] = dp[j-i] + dp[j];当中i代表重量,j代表当前背包容量. 意思就是 ...

随机推荐

  1. 界面控件 - 滚动条ScrollBar

    界面是人机交互的门户,对产品至关重要.在界面开发中只有想不到没有做不到的,有好的想法,当然要尝试着做出来.对滚动条的扩展,现在有很多类是的例子. VS2015的代码编辑是非常强大的,其中有一个功能可以 ...

  2. 使用dom4j技术对xml文件的基本操作

    1.pojo类:Notice package com.green.notice.storage; import java.util.ArrayList; import java.util.List; ...

  3. Transact-SQL 语句

    当流程控制语句必须执行一个包含两条或两条以上Transact-SQL语句块时,可以使用BEGIN...END语句进行控制 use testDB; go declare @name varchar() ...

  4. 细说Debug和Release区别

    VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步 ...

  5. Android--将字节数转化为B,KB,MB,GB的方法

    //将字节数转化为MB private String byteToMB(long size){ long kb = 1024; long mb = kb*1024; long gb = mb*1024 ...

  6. hdu 5104 Primes Problem

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5104 Primes Problem Description Given a number n, ple ...

  7. ios中如何计算(页数,行数,等等的算法)

    页数 = (总个数 + 每页最大显示个数 - 1) / 每页显示最大的个数

  8. JVM规范小结

    JVM规范组成: 1. 字节码(ByteCode): 以Class或Interface为基本单位, 具有固定结构. 2. 指令集(InstructionSet): 每个指令用一个字节表示, 最多256 ...

  9. 在WIN7下安装运行mongodb 1)、下载MongoDB

    1).下载MongoDB http://downloads.mongodb.org/win32/mongodb-win32-i386-2.4.5.zip 下载Windows 32-bit版本并解压缩, ...

  10. EF6 在原有数据库中使用 CodeFirst 总复习(四、新建实体对象)

    在原有数据库中使用 CodeFirst ,除了第一次添加实体后要立即执行一次 Enable-Migrations add-migration Initial  -IgnoreChanges updat ...