您的位置:首页 > 其它

poj 1579 Function Run Fun

2013-08-02 18:33 337 查看
  可能有人会超时,但是只要记忆化之后就可以避免超时了。其实就是将之前算过的值存下来,下次再次需要算这个值的时候直接读取数组对应变量的值。

  建议用long long型来进行存储,本人没用int型实践,也不知道是否超范围,只是建议。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a,b,c;
long long dp[21][21][21];
bool flag[21][21][21];

long long w(int x,int y,int z)
{
if(x<=0||y<=0||z<=0)
{
return 1;
}
if(x>20||y>20||z>20)
{
return w(20,20,20);
}
if(x<y&&y<z)
{
if(flag[x][y][z])
return dp[x][y][z];
long long sum = w(x, y, z-1) + w(x, y-1, z-1) - w(x, y-1, z);
dp[x][y][z] = sum;
flag[x][y][z] = true;
return dp[x][y][z];
}
else
{
if(flag[x][y][z])
return dp[x][y][z];
long long sum = w(x-1, y, z) + w(x-1, y-1, z) + w(x-1, y, z-1) - w(x-1, y-1, z-1);
dp[x][y][z] = sum;
flag[x][y][z] = true;
return dp[x][y][z];
}
}

int main(void)
{
memset(flag,false,sizeof(flag));
while(cin>>a>>b>>c)
{
if(a==-1&&b==-1&&c==-1)
break;
cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<w(a,b,c)<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: