40 条题解
-
0how LV 10 @ 2009-07-30 21:59:09
...多谢fengyuchen牛指点..让我成功升为2星...~~
-
02009-07-30 21:16:18@
我是沙茶...开1000000000的数组...
-
02009-07-30 18:00:59@
200题纪念....
我是100W内的记忆化Accepted 有效得分:100 有效耗时:0ms
-
02009-07-30 17:07:20@
半记忆化搜索,很简单
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-08-15 16:26:07@
hoho~听了各位大牛们的话,打了个小表,AC了~
54th AC(意思: 5 4 A C)
-
02009-07-30 15:45:01@
没问题了,大家提交吧
大牛们好强秒杀了 -
02009-07-30 15:11:17@
搜索会不会超啊?
占个位子先! -
02009-07-30 14:43:24@
沙发
-
02009-07-30 14:22:51@
我来了
-
02009-07-30 13:00:59@
很神秘的题目……
-
02009-07-30 19:42:11@
我来迟了
妈的,我的running记录要变成历史了,测评机为什么测不出我的,我的RP啊 -
02009-07-30 12:51:37@
-_-|||
欢迎访问个人blog http://dfs35123.spaces.live.com/ -
02009-07-30 12:46:38@
欢迎访问个人blog
-
-12016-02-15 21:43:10@
map大法好!!!
```
//
//Problem:Vijos P1599 货币
//Writer:LZX
//Algorithm:记忆化搜索
//Date:2016.2.16
//
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
#include<set>
using namespace std;#define next nextx
map<int,long long>dfsx;
int t;inline int read(){
int x=0,fu=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')fu=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*fu;
}inline long long dfs(int x){
if(x==0)return 0;
if(dfsx[x])return dfsx[x];
long long dfsxx=dfs(x/2)+dfs(x/3)+dfs(x/4);
return dfsx[x]=(dfsxx>x)?dfsxx:x;
}int main(){
t=read();
for(int i=1;i<=t;i++){
int x=read();
printf("%lld\n",dfs(x));
}
return 0;
}
```测试数据 #0: Accepted, time = 0 ms, mem = 272 KiB, score = 20
测试数据 #1: Accepted, time = 0 ms, mem = 276 KiB, score = 20
测试数据 #2: Accepted, time = 0 ms, mem = 280 KiB, score = 20
测试数据 #3: Accepted, time = 0 ms, mem = 308 KiB, score = 20
测试数据 #4: Accepted, time = 0 ms, mem = 308 KiB, score = 20
Accepted, time = 0 ms, mem = 308 KiB, score = 100 -
-12015-08-11 14:32:11@
#include<cstdio>
#include<cstring>
using namespace std;
long long a[40000001];
long long mymax(long long x,long long y){return x>y?x:y;}
long long dfs(long long x)
{
if(x<3) return x;
if(x<40000001 && a[x]!=0) return a[x];
if(x<40000001) return a[x]=mymax(x,dfs(x/2)+dfs(x/4)+dfs(x/3));
else return mymax(x,dfs(x/2)+dfs(x/4)+dfs(x/3));
}
int main()
{
long long n;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%I64d",&n);
printf("%I64d\n",dfs(n));
}
return 0;
} -
-12009-08-02 20:21:57@
表10000足矣
-
-12009-07-30 17:10:46@
不打表也可以秒杀!
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
-12009-07-30 16:31:34@
地下室
-
-12009-07-30 15:53:08@
先预处理出1000000以内的结果好了
就能秒 -
-22009-07-31 21:33:29@
编译通过...
├ 测试数据 01:答案正确... 41ms
├ 测试数据 02:答案正确... 9ms
├ 测试数据 03:答案正确... 41ms
├ 测试数据 04:答案正确... 25ms
├ 测试数据 05:答案正确... 41ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:157ms
先计算一个1000万的表(小数据时可能不兑换,大数据一定兑换),再开始读数据。
表内有的直接出表内没有的dfs:
function find(x:int64):int64;
begin
if x