尽管get到了题解,还是wrong了5遍,原因在于自己忽略了退出循环的条件是0-max都无法找到符合条件的值,而不是一找到不符合条件的值就退出循环。
这道题吧,让我心情复杂,zzq没A的题,我果然也不能A
#include<stdio.h> #include<string.h> #define N 55 int num[N],dp[N][N*N]; int main() { int t; int n,begain,max; int i,j,flag; scanf("%d",&t); while( t --) { scanf("%d%d%d",&n,&begain,&max); for(i = 1; i <= n; i ++) scanf("%d",&num[i]); memset(dp,0,sizeof(dp)); dp[0][begain] = 1; for(i = 1; i <= n; i ++) { flag = 0; for(j = 0; j <= max; j ++) { if(dp[i-1][j]) { if(j-num[i]>=0) { dp[i][j-num[i]] = 1; flag = 1; } if(j+num[i]<=max) { dp[i][j+num[i]] = 1; flag = 1; } } } if(!flag) break; } if(!flag) printf("-1\n"); else { for(i = max; i >= 0;i--) { if(dp[n][i]) { printf("%d\n",i); break; } } } } return 0; }