题意:给出整数n和k,n代表拥有的钱数量,k代表有k种工具,其价钱分别为1~k。求n元能有多少种购买的方案。

思路:k最大有100,数量过大,要用大数。其他的基本和完全背包一样。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int B=, N=;
int coin[], n, k; struct bign { //请先设置常数N作为缓冲区和最大整数的长度。
int len, sex;
int s[N]; bign() { //创建一个新的大数
this -> len = ;
this -> sex = ;
memset(s, , sizeof(s));
}
bign (int number) {*this = number;} //创建一个大数,用整型初始化
bign (const char* number) {*this = number;} //创建一个大数,用字符串初始化 void operator = (const char *number) { //重载等号,等于一个字符串
int begin = ;
len = ;
sex = ;
if (number[begin] == '-') {
sex = -;
begin++;
}
else if (number[begin] == '+')
begin++; for (int j = begin; number[j]; j++)
s[len++] = number[j] - '';
} bign operator = (int number) { //重载等号,等于一个整型
char str[N]; //注意这里的N,要设一个缓冲区在外面供使用。
sprintf(str, "%d", number);
*this = str;
return *this;
} bign change(bign cur) {
bign now;
now = cur;
for (int i = ; i < cur.len; i++)
now.s[i] = cur.s[cur.len - i - ];
return now;
} void delZore() { // 删除前导0.
bign now = change(*this);
while (now.s[now.len - ] == && now.len > ) {
now.len--;
}
*this = change(now);
} void put() { // 输出数值。
delZore();
if (sex < && (len != || s[] != ))
cout << "-";
for (int i = ; i < len; i++)
cout << s[i];
} bign operator + (const bign &cur){ //只能是大数operator大数
bign sum, a, b;
sum.len = ;
a = a.change(*this);
b = b.change(cur); for (int i = , g = ; g || i < a.len || i < b.len; i++){
int x = g;
if (i < a.len) x += a.s[i];
if (i < b.len) x += b.s[i];
sum.s[sum.len++] = x % ;
g = x / ;
}
return sum.change(sum);
} bign operator - (const bign &cur) { //只能是大数operator大数
bign sum, a, b;
sum.len = len;
a = a.change(*this);
b = b.change(cur); for (int i = ; i < b.len; i++) {
sum.s[i] = a.s[i] - b.s[i] + sum.s[i];
if (sum.s[i] < ) {
sum.s[i] += ;
sum.s[i + ]--;
}
}
for (int i = b.len; i < a.len; i++) {
sum.s[i] += a.s[i];
if (sum.s[i] < ) {
sum.s[i] += ;
sum.s[i + ]--;
}
}
return sum.change(sum);
}
}; void cal()
{
dp[]=;
for(int i=; i<=n; i++) dp[i]=; //初始化
int tmp=min(k,n); //k>n的部分买不起
for(int i=; i<tmp; i++)
for(int j=; j+coin[i]<=n; j++)
dp[j+coin[i]] = dp[j+coin[i]] + dp[j]; dp[n].put();
} int main() {
//freopen("input.txt", "r", stdin);
for(int i=; i<; i++) coin[i]=i+; //初始化
while(~scanf("%d%d",&n,&k))
cal();
return ;
}

AC代码

POJ Dollar Dayz 美元假日(完全背包,常规+大数)的更多相关文章

  1. 【BZOJ】1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店(背包+高精度)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1655 背包就没什么好说的了,裸的完全背包.. 但是我一开始交开了ull都wa了T_T.. 精度太大. ...

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

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

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

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

  4. poj3181 Dollar Dayz ——完全背包

    link:http://poj.org/problem?id=3181 本来很常规的一道完全背包,比较有意思的一点是,结果会超int,更有意思的解决方法是,不用高精度,用两个整型的拼接起来就行了.OR ...

  5. POJ 2184 Cow Exhibition【01背包+负数(经典)】

    POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...

  6. Dollar Dayz(大数母函数,高低位存取)

    Dollar Dayz Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5655   Accepted: 2125 Descr ...

  7. POJ.3624 Charm Bracelet(DP 01背包)

    POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...

  8. POJ 2392 Space Elevator(贪心+多重背包)

    POJ 2392 Space Elevator(贪心+多重背包) http://poj.org/problem?id=2392 题意: 题意:给定n种积木.每种积木都有一个高度h[i],一个数量num ...

  9. POJ 3260 The Fewest Coins(多重背包+全然背包)

    POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ...

随机推荐

  1. jquery&nbsp;easyui&nbsp;datebox&nbsp;的使用&nbsp;.

    jquery easyui datebox 的使用 . 分类: jquery-easyui2012-10-09 19:07 266人阅读 评论(0) 收藏 举报 目录(?)[+] 看了jquery e ...

  2. JavaWeb_tomcat设置默认应用

    在tomcat的server.xml文件中设置默认应用. 在tomcat文件目录里面的conf/server.xml文件中,在<Engine>...</Engine>中再增加一 ...

  3. ACM-ICPC2018北京网络赛 80 Days(双端队列+尺取)

    题目4 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules Ve ...

  4. python-根据URL地址下载文件

    博主个人网站:https://chenzhen.online 使用Python中提供的urllib.request下载网上的文件 #coding=utf-8 """ 目标 ...

  5. Unity学习(十三)场景优化之四叉树

    http://blog.sina.com.cn/s/blog_89d90b7c0102wyfw.html 四叉树是在二维图片中定位像素的唯一适合的算法.因为二维空间(图经常被描述的方式)中,平面像素可 ...

  6. 阿里云ECS测试服务器部署

    前序:为了提供一个干净的测试环境,更好地验证产品问题,也为了防止被开发人员频繁发布代码而打断测试工作,故测试团队搭建了一台阿里云ECS服务器,以下是具体的部署信息: 1. 安装JDK Java版本:J ...

  7. HDU-1845-Jimmy's Assignment

    链接:https://vjudge.net/problem/HDU-1845 题意: 给一个有向图,求最大匹配. 思路: 有相图的最大匹配,可以通过加上反向边, 求这个无向图的最大匹配, 原图的最大匹 ...

  8. Codeforces Round 56-B. Letters Rearranging(思维)

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  9. jq:jQuery库文件jquery.scrollLoading.js使用方法

    图片延迟加载,滚动到哪里加载到哪里: 1:头部加载库文件 <script type="text/javascript" src="/js/jquery.scroll ...

  10. 基于apache httpclient的常用接口调用方法

    现在的接口开发,大部分是基于http的请求和处理,现在整理了一份常用的调用方式工具类 package com.xh.oms.common.util; import java.io.BufferedRe ...