看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 題號: ACM 10032 遇到的問題: WA 有問題的code: #include<stdio.h> #include<stdlib.h> int main(void){ int case_num; int p[100]; int i,j,k; int p_num; int temp; int team_a,team_b; /* 兩個 team 目前的體重和*/ int c_a,c_b; /* 兩個 team的人數 */ scanf("%d",&case_num); for ( i = 0 ; i < case_num ; i ++ ){ scanf("%d",&p_num); for ( j = 0 ; j < p_num ; j ++ ){ scanf("%d",&p[j]); } for ( j = 0 ; j < p_num ; j++ ){ for ( k = j+1 ; k < p_num ; k++ ){ if ( p[k] < p[j] ) { temp = p[j]; p[j] = p[k]; p[k] = temp; } } }/* sort */ team_a = 0; team_b = 0; c_a = 0; c_b = 0; j = 0 ; k = p_num-1; while ( j <= k ){ if ( c_a == 0 && c_b == 0 ){ team_a += p[k--]; team_b += p[k--]; c_a++; c_b++; } else if ( team_b > team_a && c_b > c_a ){ team_a += p[k--]; c_a++; } else if ( team_b > team_a && c_b < c_a ){ team_b += p[j++]; c_a++; } else if ( team_b > team_a && ( c_a == c_b ) ){ team_a += p[k--]; c_a++; } else if ( team_a > team_b && ( c_a > c_b ) ){ team_b += p[k--]; c_b++; } else if ( team_a > team_b && ( c_a < c_b ) ){ team_a += p[j++]; c_a++; } else if ( team_a > team_b && ( c_a == c_b ) ){ team_b += p[k--]; c_b++; } else if ( team_a == team_b && ( c_a == c_b ) ) { team_b += p[j++]; c_b++; } else if ( team_a == team_b && ( c_a < c_b ) ){ team_a += p[j++]; c_a++; } else { team_b += p[j++]; c_b++; } } if ( team_a > team_b )printf("%d %d\n\n",team_b,team_a); else printf("%d %d\n\n",team_a,team_b); } return 0; } 補充說明: 測了sample input 和自己想的測資都會對 但是放上去還是錯了 有爬文看板上之前也有一篇10032的解法 但是還是想知道我的解法為什麼錯了 我的想法是 一開始拿到資料後 先sort 然後把最大的兩個先分別塞給 team_a team_b 接下來每跑一次迴圈 就看team_a team_b 哪個大 以及目前的人數狀態 決定給大的值 或小的值 以及給哪個team 希望板上的高手可以幫我看一下 非常感激:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.217.179
LPH66:1 7 2 48 48 49 49 50 50 輸出 148 148 08/14 03:05
LPH66:(50+49+49一隊 50+48+48+2一隊) 08/14 03:06
LPH66:本題請愛用 DP 08/14 03:06
x000032001:如你所測的 這只是個假解 只能過爛測資的假解XD 08/14 10:23
Lipstick12:可以請問一下DP是什麼嗎XD? 08/14 12:21
loveme00835:Dynamic Programming 08/14 12:23