NEFU OJ16 Function Run Fun

简单dp问题,求出所有解。如果直接递归会超时

#include<iostream>  
#include<stdio.h>  
using namespace std;  
  
int w[21][21][21];
void getValue()
{
	for(int i =0;i<21;++i)
	{
		for(int j =0;j<21;++j)
		{
			for(int k =0;k<21;++k)
			{
				if(i == 0 || j ==0 || k ==0)
				{
					w[i][j][k] = 1;
				}
				else 
				{
					if(i<j && j<k)
					{
						w[i][j][k] = w[i][j][k-1] + w[i][j-1][k-1] - w[i][j-1][k];
					}
					else
					{
						w[i][j][k] = w[i-1][j][k] + w[i-1][j-1][k] + w[i-1][j][k-1] - w[i-1][j-1][k-1];
					}
				}
			}
		}
	}
}
int main()  
{  
	getValue();
	int a,b,c;
	while(scanf("%d%d%d",&a,&b,&c) != EOF)
	{
		if( a==-1 && b==-1 &&c==-1)
		{
			break;
		}
		if(a<0 || b<0 || c<0)
		{
			printf("w(%d, %d, %d) = 1\n",a,b,c);
		}
		else
		{
			if(a>20 || b>20 || c>20)
			{
				printf("w(%d, %d, %d) = %d\n",a,b,c,w[20][20][20]);
			}
			else
			{
				printf("w(%d, %d, %d) = %d\n",a,b,c,w[a][b][c]);
			}
		}
	}
    return 0;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值