题意:给出整数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. asp.net mvc cookie超时返回登录页面问题

    filterContext.HttpContext.Response.Write("<script>top.location.href = '/Login/Index';< ...

  2. WPF TabControl SelectionChanged 重复执行的问题

    很邪门的问题,我曾经都感觉是微软的bug了. 问题是这样的:在我的tabcontrol下的tabitem中有一个combobox控件,由于一些原因,需要执行tabcontrol的SelectionCh ...

  3. MySQL 之 扩展例子

    扩展例子 插入一条记录 INSERT INTO 表名 [(字段1,…,字段n)] VALUES (值1,…,值n) 插入查询的结果 INSERT INTO 表名 (字段1,…,字段n) VALUES ...

  4. 后缀数组dc3算法模版(待补)

    模版: ; #define F(x) ((x)/3+((x)%3==1?0:tb)) #define G(x) ((x)<tb?(x)*3+1:((x)-tb)*3+2) int wa[maxn ...

  5. VisualStudio2017中新建的ASP.NET Core项目中的各个文件的含义

     Program.cs is the entry point for the web application; everything starts from here. As we mentione ...

  6. SpringMVC中的常用注解

    RequestParam 作用: 用于  将请求参数区数据  映射到  功能处理方法的参数上. 属性: value  请求参数中的名称 required   请求参数中是否必须提供此参数. 默认值: ...

  7. IT 面试题

    1.JDK1.X新增的功能   ==>>> 2.字符流和字节流的区别,使用场景,相关类   ==>>> 字节流与字符流 在Java.io包中操作文件内容的主要有两大 ...

  8. cogs 721. [SDOI2007] 线性方程组

    721. [SDOI2007] 线性方程组 ★★   输入文件:gaess.in   输出文件:gaess.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 已知 n 元 ...

  9. [Xcode 实际操作]五、使用表格-(10)插入UITableView单元格

    目录:[Swift]Xcode实际操作 本文将演示如何插入一行单元格. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先添加两个协 ...

  10. IT兄弟连 JavaWeb教程 异步请求对象的API

    Ajax的核心是XMLHttpRequest对象(xhr),xhr为向服务器发送请求和解析服务器响应提供了接口,能够以异步的方式从服务器获取新数据. xhr的主要方法有: ●  void open(S ...