Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
神奇的 WA ,求大神解答本地 G++ 全部正确,在线 G++ 编译 WA, C++ 编译 AC,代码如下: #include<iostream> #include<iomanip> #include<cmath> using std::ios; using std::cout; using std::cin; using std::cerr; using std::endl; using std::fixed; using std::setprecision; #define REP1(i,n) for(int i=1, _##i=(n+1); i<_##i; ++i) #define REP(i,n) for(int i=0, _##i=(n); i<_##i; ++i) #define INIT(a,b) memset(a,b,sizeof(a)) #define MAX(a,b) ((a)>(b)?(a):(b)) #define MIN(a,b) ((a)<(b)?(a):(b)) #define PI 3.1415926535898 #define INF 1000000000 int sum[600][60]; int village[600]; int main() { std::ios::sync_with_stdio(false); REP(i,600) REP(j,60) sum[i][j] = INF; int V,P; cin >> V >> P; REP1(v,V) cin >> village[v]; int s = 0; // base REP1(v,V) { s += village[v]; sum[v][1] = v * village[v] - s; } for (int p=1; p <= P-1; p++) { for (int v1=p; v1 <= V; v1++) { int k = v1, v2 = v1+1; int s1 = village[v1], s2 = village[v1]; while (v2 <= V) { if (village[v2] - village[k+1] <= village[k+1] - village[v1]) { s2 += village[v2]; sum[v2][p+1] = MIN(sum[v2][p+1], sum[v1][p] + (s1 - (k-v1+1)*village[v1]) + ((v2-k)*village[v2] - (s2-s1))); v2 ++; } else { k ++; s1 += village[k]; } } } // REP1(i,P) { // REP1(j, V) cout << sum[j][i] << ' '; cout << endl; // } // cout << endl; } int min = INF; s = 0; for (int v=V; v>0; v--) { s += village[v]; min = MIN(min, sum[v][P] + s - (V-v+1)*village[v]); } cout << min << endl; return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator