BZOJ 1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店 dp+高精度

1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店

Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 637 Solved: 321
[Submit][Status][Discuss]

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.FarmerJohnhasexactly 5 to spend. He can buy 5 tools at 1eachor1toolat 3 and an additional 1 tool at 2.Ofcourse,thereareothercombinationsforatotalof5differentwaysFJcanspendallhismoneyontools.Heretheyare:1@US 3 + 1 @ US 21@US 3 + 2 @ US 11@US 2 + 3 @ US 12@US 2 + 1 @ US 15@US 1 Write a program than will compute the number of ways FJ can spend N dollars (1 <= N <= 1000) at The Cow Store for tools on sale with a cost of 1.. K (1 <= K <= 100).

约翰到奶牛商场里买工具.商场里有K(1≤K≤100).种工具,价格分别为1,2,…,K美元.约翰手里有N(1≤N≤1000)美元,必须花完.那他有多少种购买的组合呢?

Input

A single line with two space-separated integers: N and K.

仅一行,输入N,K.

Output

A single line with a single integer that is the number of unique ways FJ can spend his money.

不同的购买组合数.

Sample Input

5 3

Sample Output

5

HINT

Source

Silver

题解:
第一次看到这道题,woc这不傻逼题吗,水了水了。。
然后才发现答案有多大,要用高精来存。恰好初赛考了然而我高精也确实忘得差不多了……就当复习高精了吧。

#include<bits/stdc++.h>
using namespace std;

const int K = 40 + 5;
const int N = 1000 + 10;

int n,k;
int f[N][K];

int main(){
    scanf("%d%d",&n,&k);
    memset(f,0,sizeof(f));
    int cnt=0;f[0][++cnt]=1;
    for(int i=1;i<=k;++i){
        for(int j=i;j<=n;++j){
            for(int d=1;d<=cnt;++d) f[j][d]+=f[j-i][d];
            for(int d=1;d<=cnt;++d){
                f[j][d+1]+=f[j][d]/10;
                f[j][d]%=10;
            }
            if(f[j][cnt+1]!=0) ++cnt;
        }
    }
    for(int i=cnt;i>=1;--i) printf("%d",f[n][i]);
    return 0;
}
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页