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(); } }
浙公网安备 33010602011771号