记忆化搜索就可以   #include<stdio.h> int ans[1010]; int min(int a,int b) { return a<b?a:b; } int dfs(int level, int songs, int s ,int L) { if (ans[songs] != -1) { return ans[songs]; } if (songs == 0) { return 0; } int num = (L+1)/(s+1); int sum = songs+1; int i; for (i = 1; i <= num && i <= songs; ++i) { if (i%13 == 0) continue; sum = min(sum, 1+dfs(level+1, songs-i, s, L)); } ans[songs] = sum; return sum; } int main() { int n, s, L; int i, j; while(scanf("%d%d%d", &n,&s, &L) != EOF) { //printf("%d\n", (L+1)/(s+1)); for (j = 0; j <= 1010; j++) ans[j] = -1; printf("%d\n", dfs(0, n, s, L)); } return 0; }
点赞 评论

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务