Dollar Dayz poj3181
http://poj.org/problem?id=3181
这个题目一开始就能看出来是个dp问题,但是我并没有一开始就看出来是一个完全背包为题,只是想着根据以前的方法,这个问题应该是可以找到规律的,但是,还是被坑了,这还是一个大数问题!
首先我膜拜一下hankcs大神的:
///////////////////////////////////////////////////////////
- #include <iostream>
- using namespace std;
- unsigned long long dp[100 + 16][1000 + 16]; // dp[i][j] := 用i种价格配出金额j的方案数
- ///////////////////////////SubMain//////////////////////////////////
- int main(int argc, char *argv[])
- {
- #ifndef ONLINE_JUDGE
- freopen("in.txt", "r", stdin);
- freopen("out.txt", "w", stdout);
- #endif
- int N, K;
- cin >> N >> K;
- dp[0][0] = 1;
- for (int i = 1; i <= K; ++i)
- {
- for (int k = 0; k <= N; k += i)
- {
- for (int j = N; j >= k; --j)
- {
- dp[i][j] += dp[i - 1][j - k];
- }
- }
- }
- cout << dp[K][N] << endl;
- #ifndef ONLINE_JUDGE
- fclose(stdin);
- fclose(stdout);
- system("out.txt");
- #endif
- return 0;
- }
- ////////////////////////////////////////////////////////////
hancks的这个做法是用完全背包
dp[i][j] = dp[i – 1][j] + dp[i – 1][j – i] + dp[i – 1][j – 2 * i] + … + dp[i – 1][0]
由这个公式可以再递推:
将j换成j – i有
dp[i][j – i] = dp[i – 1][j – i] + dp[i – 1][j – 2 * i] + … + dp[i – 1][0]
得出:if j >= i:
dp[i][j] = dp[i-1][j] + dp[i][j-i];
我的做法是一开始就推出了这个公式,因为不小心看出了这个规律
i:1->4 ,j :1->5 dp[i][j]规律是这样的
1 1 1 1 1
1 2 2 3 3
1 2 3 4 5
1 2 3 4 6
得出了j >= i : dp[i][j] = dp[i-1][j] + dp[i][j-i]
然而,这还是个大数问题,即使unsigned long long 都不行,开始一直没想通!
/*************************************************************************
> File Name: DollarDayz_poj3181.cpp
> Author: spzhao
> Mail: spzhaol@163.com
> Created Time: 2015年10月14日 星期三 11时13分22秒
************************************************************************/ #include<iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> #define mod 10000000000000000
using namespace std; const int N = 1005;
const int K = 105;
unsigned long long dp[100+16][1000+16][2];
int n,k;
void solve()
{
for (int i = 1;i <= k;i++)
{
for (int j = 1;j <= n;j++)
{
if (j >= i)
{
dp[i][j][0] = dp[i-1][j][0]+dp[i][j-i][0];
dp[i][j][1] = dp[i-1][j][1]+dp[i][j-i][1];
dp[i][j][0] += dp[i][j][1]/mod;
dp[i][j][1] = dp[i][j][1]%mod;
}
else
{
dp[i][j][0] = dp[i-1][j][0];
dp[i][j][1] = dp[i-1][j][1];
}
}
}
if (dp[k][n][0])
cout << dp[k][n][0];
cout << dp[k][n][1] << endl;
}
int main ()
{
cin >> n >> k;
memset(dp,0,sizeof(dp));
dp[1][0][1] = 1;
for (int i = 1;i <= k;i++)
dp[i][0][1] = 1;
solve();
return 0;
}
Dollar Dayz poj3181的更多相关文章
- Dollar Dayz(大数母函数,高低位存取)
Dollar Dayz Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5655 Accepted: 2125 Descr ...
- POJ 3181 Dollar Dayz(全然背包+简单高精度加法)
POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自 ...
- poj 3181 Dollar Dayz(完全背包)
Dollar Dayz Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5419 Accepted: 2054 Descr ...
- poj3181 Dollar Dayz
Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of to ...
- poj3181 Dollar Dayz ——完全背包
link:http://poj.org/problem?id=3181 本来很常规的一道完全背包,比较有意思的一点是,结果会超int,更有意思的解决方法是,不用高精度,用两个整型的拼接起来就行了.OR ...
- poj3181【Dollar Dayz】
做完这道题,心里五味陈杂,明明是最水的一道题,我却做了最长的时间. 题意是求用1-k的和表示n的方案数. 显然是个计数dp,但我不会.思考半小时未果. 然后找尹鹏哲,他给我讲了个错的dp方程,结果调试 ...
- (完全背包 大数)Dollar Dayz (POJ 3181)
http://poj.org/problem?id=3181 Description Farmer John goes to Dollar Days at The Cow Store and disc ...
- bzoj1655 [Usaco2006 Jan] Dollar Dayz 奶牛商店
Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of to ...
- 【BZOJ】1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店(背包+高精度)
http://www.lydsy.com/JudgeOnline/problem.php?id=1655 背包就没什么好说的了,裸的完全背包.. 但是我一开始交开了ull都wa了T_T.. 精度太大. ...
随机推荐
- Linux系统监控命令
1. uptime: 负载监控,w命令更好地显示当前登录用户数的信息 2.top: 相当于uptime,提供了负载平均值的快照 (1)第一行: up 48days: 系统运行时间 2 users: 当 ...
- POJ2185(KMP)
Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 7896 Accepted: 3408 Desc ...
- spring-dwr注解整合
注解配置 1.web.xml 只需将DwrServlet换为DwrSpringServlet(包名不同) 2.dwr类 3.applicationContext.xml 4.annotationCon ...
- jvm垃圾收集小记
垃圾收集是java与c/c++的最大不同.有了jvm的自动垃圾收集机制,就可以让程序员专注于程序逻辑开发, 而不是花费大量的时间是考虑一个变量应该在什么时候去释放. 下面我们就来简单说一下java的垃 ...
- python解释器的安装;python2与python3同时在环境变量中时的解决方案
新文档 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,addres ...
- Boost.Hana在visual studio 2017 rc中的残缺使用
最新的visual studio还不支持hana,不知道vs2017正式版本出后会不会支持.等不及了,先用rc版试试吧. 1.从https://github.com/boostorg/hana下载或拉 ...
- 关于最优化读写,测试各个加锁:Lock、安全字典、信号量、ReaderWriterLock、ReaderWriterLockSlim
大家对于自身项目中都有本地缓存的逻辑,但这块的读写何种机制下哪个快,哪个慢,需要测试对比,以下测试报告,期望给大家一个借鉴,如果有更好的测试结果也欢迎大家一起讨论. 以下测试是开启10个并发任务对同一 ...
- DFS 分布式文件系统 选型笔记
需求按优先级顺序如下: 1)存放3TB以上中小型文件,图片为主,平均在500~700k,一般在1M以内. 2)要集群化,支持负载均衡,高可用高性能.有大企业使用背书最好. 3)提供Java程序上传文件 ...
- git用法-打补丁
1. git cherry-pick 作用:从一个branch上选择一个commit,添加该commit到另一个branch上. 1. 切换到你想添加commit的分支上. git checkout ...
- fetch使用的常见问题及解决办法
首先声明一下,本文不是要讲解fetch的具体用法,不清楚的可以参考MDN fetch教程. 引言 说道fetch就不得不提XMLHttpRequest了,XHR在发送web请求时需要开发者配置相关请求 ...