spoj 247
不管行列 总是先切割切割费用大的 代码比较烂 ......
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; bool cmp(int a, int b) { return a > b; } int a[1010],b[1010]; int main() { int T; scanf("%d",&T); while(T--) { int m,n; scanf("%d%d",&m,&n); for(int i = 0; i < m-1; i++) { scanf("%d",&a[i]); } for(int i = 0; i < n-1; i++) { scanf("%d",&b[i]); } sort(a, a+m-1, cmp); sort(b, b+n-1, cmp); int sum = 0; int p,q; p = q = 0; while(p != m-1 || q != n-1) { if(p != m-1 && q != n-1 && a[p] >= b[q]) { sum += a[p]; for(int j = q; j < n-1; j++) { sum += b[j]; } p++; } else if(p != m-1 && q != n-1 && a[p] < b[q]) { sum += b[q]; for(int j = p; j < m-1; j++) { sum += a[j]; } q++; } else if(p == m-1) { for(int j = q; j < n-1; j++) { sum += b[j]; } q = n-1; } else { for(int j = p; j < m-1; j++) { sum += a[j]; } p = m-1; } } printf("%d\n",sum); } return 0; }