hdu4504基础dp,二维

/*****************************************
Author      :Crazy_AC(JamesQi)
Time        :2015
File Name   :
思路:定义一个二维的dp[i][j]数组就好了,
*****************************************/
// #pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <sstream>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <map>
#include <set>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <limits.h>
using namespace std;
#define MEM(a,b) memset(a,b,sizeof a)
#define pk push_back
template<class T> inline T Get_Max(const T&a,const T&b){return a < b?b:a;}
template<class T> inline T Get_Min(const T&a,const T&b){return a < b?a:b;}
typedef long long ll;
typedef pair<int,int> ii;
const int inf = 1 << 30;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int A,B,t;
ll dp[24][77];
inline void Init(){
	MEM(dp, 0);
	dp[1][1] = dp[1][2] = dp[1][3] = 1;
	for (int i = 1;i <= 20;i++){
		for (int j = 1;j <= 60;j++){
			if (j > 1) dp[i][j] += dp[i - 1][j - 1];
			if (j > 2) dp[i][j] += dp[i - 1][j - 2];
			if (j > 3) dp[i][j] += dp[i - 1][j - 3];
		}
	}
}
int main()
{	
	// ios::sync_with_stdio(false);
	// freopen("in.txt","r",stdin);
	// freopen("out.txt","w",stdout);
	Init();
	while(~scanf("%d%d%d",&A,&B,&t)){
		int b_num = (t / 15);
		int a_num = (t / 15 + 1) / 2;
		if (a_num == 0){
			if (A > B) printf("1\n");
			else printf("0\n");
			continue;
		}
		B += b_num - a_num;
		int tmp = (B - A) + 1;
		if (tmp < 0) tmp = 0;
		ll ans = 0;
		for (int i = tmp;i <= a_num * 3;i++){
			ans += dp[a_num][i];
			// cout << ans << endl;
		}
		printf("%lld\n",ans);
	}
	return 0;
}

你可能感兴趣的:(dp,基础dp)