讨论 / 表示记忆化可以过(程序额)
RQNOJ@小白 2012-06-06 03:01:00
点我顶贴 收藏 删除
记忆化标称

#include<stdio.h>

#include<iostream>

using namespace std;

int n,m;

long long f[10][60];

long long dfs(int k,int i){

if(i>n)return 1;

if(f[k][i]!=-1)return f[k][i];

long long tmp=0;

if(k==m-1){

tmp+=dfs(0,i+1);

}

else{

tmp+=dfs(0,i+1);

tmp+=dfs(k+1,i+1);

}

f[k][i]=tmp;

return tmp;

}

int main(){

freopen("nuclear.in","r",stdin);

freopen("nuclear.out","w",stdout);

cin>>n>>m;

memset(f,-1,sizeof(f));

cout<<dfs(0,1);

}

#1 LINSOFT@2012-06-06 03:01:00
回复 删除
我的也是!!!

program he;

var n,m:integer;

b:array[1..50,0..5,0..1] of int64;

function find(i,f,a:integer):int64;

var t:integer;

begin

if b[i,f,a]<>0 then exit(b[i,f,a]);

t:=f;

if a=1 then inc(f) else f:=0;

if f=m then exit(0);

if i>=n then begin exit(1); end;

find:=find(i+1,f,0) + find(i+1,f,1);

b[i,t,a]:=find;

end;

begin

readln(n,m);

fillchar(b,sizeof(b),0);

writeln(find(1,0,0)+find(1,0,1));

end.

查看更多回复
提交回复