UVA 10313 - Pay the Price

理解了别人的代码,找好状态,以后再做一遍。。

#include<stdio.h>
#include<string.h>
#define MAXN 310
char b[100];
int N, L1, L2;
long long int f[MAXN][MAXN];
void prepare()
{
    int i, j;
    N = 300;
    memset(f, 0, sizeof(f));
    f[0][0] = 1;
    for(i = 0; i <= N; i ++)
        for(j = 1; j <= N; j ++)
        {
            if(i - j >= 0)
                f[i][j] += f[i - j][j];
            if(j - 1 >= 0)
                f[i][j] += f[i][j - 1];
        }
}
void solve()
{
    int i, j;
    L1 = L2 = -1;
    sscanf(b, "%d%d%d", &N, &L1, &L2);
    L1 = L1 > 300 ? 300 : L1;
    L2 = L2 > 300 ? 300 : L2;
    if(L1 == -1)
        printf("%lld\n", f[N][N]);
    else
    {
        if(L2 == -1)
            printf("%lld\n", f[N][L1]);
        else
        {
            if(L1 == 0)
                printf("%lld\n", f[N][L2]);
            else
                printf("%lld\n", f[N][L2] - f[N][L1 - 1]);
        }
    }
}
int main()
{
    prepare();
    while(gets(b) != NULL)
    {
        solve();
    }
}
posted on 2012-07-31 13:39  BFP  阅读(228)  评论(0)    收藏  举报