POJ 3181 Dollar Dayz (完全背包,大数据运算)
题意:给出两个数,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 (完全背包,大数据运算)的更多相关文章
- POJ 3181 Dollar Dayz(全然背包+简单高精度加法)
POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自 ...
- POJ 3181 Dollar Dayz ( 完全背包 && 大数高精度 )
题意 : 给出目标金额 N ,问你用面额 1~K 拼成 N 的方案有多少种 分析 : 完全背包的裸题,完全背包在 DP 的过程中实际就是列举不同的装填方案数来获取最值的 故状态转移方程为 dp[i] ...
- POJ 3181 Dollar Dayz && Uva 147 Dollars(完全背包)
首先是 Uva 147:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_p ...
- poj 3181 Dollar Dayz(完全背包)
Dollar Dayz Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5419 Accepted: 2054 Descr ...
- poj 3181 Dollar Dayz(求组成方案的背包+大数)
可能nyist看见加的背包专题我老去凑热闹,觉得太便宜我了.他们新加的搜索专题居然有密码. 都是兄弟院校嘛!何必那么小气. 回到正题,跟我写的上一篇关于求组成方案的背包思路基本一样,无非就是一个二维费 ...
- POJ 3181 Dollar Dayz 【完全背包】
题意: 给出两个数,n,m,问m以内的整数有多少种组成n的方法完全背包+大数划分 思路: dp[i][j] := 用i种价格配出金额j的方案数. 那么dp[i][0] = 1,使用任何价格配出金额0的 ...
- POJ 3181 Dollar Dayz(高精度 动态规划)
题目链接:http://poj.org/problem?id=3181 题目大意:用1,2...K元的硬币,凑成N元的方案数. Sample Input 5 3 Sample Output 5 分析: ...
- poj 3181 Dollar Dayz (整数划分问题---递归+DP)
题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K.称为整数N的K划分. 递归:直接看代码: 动态规划:dp[i][j]:=将整数i ...
- POJ 3181 Dollar Dayz 01全然背包问题
01全然背包问题. 主要是求有多少种组合.二维dp做的人多了,这里使用一维dp就能够了. 一维的转换方程:dp[j] = dp[j-i] + dp[j];当中i代表重量,j代表当前背包容量. 意思就是 ...
随机推荐
- WPF学习03:Element Binding
元素绑定是数据绑定的一个子集,关于数据绑定是什么,园子里有很多文章都说得非常好,在此不予详细说明. WPF实现了完善的数据绑定机制,使得元素绑定有简易的实现步骤. 本文的元素指的是WPF中的可视控件. ...
- WPF实现3D翻转的动画效果
1.前端代码实现 1.1 原理见代码注析 <Grid MouseDown="Grid_MouseDown"> <Viewport3D> <Viewpo ...
- HTML5 API 之 history
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Java当中的异常
异常:中断了正常指令流的事件,是JVM虚拟机产生的对象 异常是程序运行时产生的,和编译无关 class Test{ public static void main(String args[]){ Sy ...
- 刀哥多线程之主队列gcd-06-main_queue
主队列 特点 专门用来在主线程上调度任务的队列 不会开启线程 以先进先出的方式,在主线程空闲时才会调度队列中的任务在主线程执行 如果当前主线程正在有任务执行,那么无论主队列中当前被添加了什么任务,都不 ...
- Python数学运算
python中的加减乘除比其他的语言简单,不需要对其赋值变量 (1)加减乘除 ) #加法 ) #减法 ) #乘法 ) #除法 5.0 ) #乘方 (2)判断 判断返回的是True或者False ) # ...
- spring 基本操作总结主要是aop以及依赖注入的基本配置
一所需架包 spring commom-logging.jar spring.jar 注解 common-annotation.jar aop面向切面 aspectjrt.jar aspect ...
- Android UmengShareSDK第三方登录
Android UmengShareSDK 第三方登录- 今天就不废话了,集成平台第三方登录.市面上集成平台有shareSDK 和 Ument两种,shareSDK的ipa和服务好些,如果自己研究会很 ...
- 安装RubyMine
在mac上安装RubyMine的方法: 1.运行 brew cask install rubymine 自动安装. 2.按提示安装java更新. 3.RubyMine注册码: name: rubym ...
- iOS9之Bitcode
Bitcode是被编译程序的一种中间形式的代码. 更新Xcode7后需要将”Build Settings”->”Enable Bitcode”设为NO,保证第三方库能真机运行项目. ...