5 5 8 13 27 14
3
因為最多只會有20個西瓜,DFS搜索的話勢必秒過,嘗試用01背包解的,發現稍微控制不好dp數組和程序中的循環處理就會引發TM,不過勉強2000+ms還是可以過得去的!!!
#include#include #include int a[25]; int dp[100005]; int max(int a,int b) {return a>b?a:b;} int main() { int n,i,j,k; while(scanf("%d",&n!=EOF)) { int sum=0; memset(dp,0,sizeof(dp)); for(i=0;i =a[i];j--) dp[j]=max(dp[j],dp[j-a[i]]+a[i]); printf("%d\n",sum-dp[k]*2); } return 0; }