POJ 1160 Post Office
WA
1. 写出了 dist[][] 数组和 minDist() 函数, 实现了 minDist 函数但最终却是使用了 dist 数组
不一致
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <iostream> #include <stdio.h> #include <memory.h> #include <algorithm> #include <vector> #include <map> #include <set> #include <string> #include <deque> #include <cstring> #define MIN(x,y) (x)<(y)?(x):(y) using namespace std; int pos[10010]; int dp[10010][40]; int minDist( int i, int j) { if (i >= j) return 0; int mid = (i+j)/2; int sum = 0; for ( int k = i; k <= j; k ++) { sum += abs (pos[k]-pos[mid]); } return sum; } int solve_dp( int v, int p) { memset (dp, 0x3f, sizeof (dp)); // init for ( int i = 0; i <= p; i ++) dp[0][i] = 0; for ( int i = 1; i <= v; i ++) { for ( int j = 1; j <= p; j ++) { for ( int k = 0; k < i; k ++) { dp[i][j] = min(dp[i][j], dp[k][j-1] + minDist(k+1,i)); } } } return dp[v][p]; } int main() { freopen ( "C:\\Users\\vincent\\Dropbox\\workplacce\\joj\\test.txt" , "r" , stdin); int V, P; while ( scanf ( "%d%d" , &V, &P) != EOF) { for ( int i = 0; i < V; i ++) { scanf ( "%d" , pos+i+1); } int res = solve_dp(V, P); printf ( "%d\n" , res); } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步