zoukankan      html  css  js  c++  java
  • 【POJ】1160 Post Office

    还是DP,这题最开始想复杂了。移位前i个邮局确立后,想要再添加个邮局无法保证刚好在余下的部分。其实这道题,可以简单理解为先确立后i个邮局,则在确立i+1个邮局时,最后一个邮局是新添加线段的重点。而且,数组略开大点儿,否则RE。这还是第一次RE,还以为RE是要把cin/cout替换为scanf/printf呢,结果搞到现在。ACM和算法还得继续研究啊,DP的题目现在自己可以动手做很多了,水题wa几次也可以ac。下周继续。

    #include <iostream>
    using namespace std;
    #include <stdlib.h>
    
    #define MAXNUM 305
    #define MAXVAL 0x7f
    
    int mymin(int a, int b) {
        return a<b ? a:b;
    }
    
    int main() {
        int v, p;
        int pos[MAXNUM];
        int i, j, k, tmp;
        int only1[MAXNUM][MAXNUM];
        int dis[MAXNUM][MAXNUM];
    
        while (scanf("%d %d", &v, &p) != EOF) {
            for (i=0; i<v; ++i)
                scanf("%d", &pos[i]);
    
            for (i=0; i<v; ++i) {
                for (j=i; j<v; ++j) {
                    int mid = (i+j)>>1;
                    tmp = 0;
                    for (k=i; k<=j; ++k) {
                        tmp += abs(pos[k] - pos[mid]);
                    }
                    only1[i][j] = tmp;
                }
            }
    
            memset(dis, MAXVAL, sizeof(dis));
    
            for (i=0; i<v; ++i)
                dis[1][i] = only1[0][i];
    
            for (i=1; i<p; ++i) {
                for (j=0; j<v; ++j) {
                    for (k=0; k<v-j; ++k) {
                        dis[i+1][j+k] = mymin(dis[i][j]+only1[j+1][j+k], dis[i+1][j+k]);
                    }
                }
            }
    
            printf("%d
    ", dis[p][v-1]);
        }
    
    
        return 0;
    }
  • 相关阅读:
    「题解」:毛一琛/$cow$ $subsets$
    「题解」:$e$
    「题解」:$d$
    「题解」:$Simple$
    「题解」:$Game$
    「题解」:砖块
    「题解」:天才绅士少女助手克里斯蒂娜
    约瑟夫问题小结
    「题解」:[loj2763][JOI2013]现代豪宅
    20190812
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3577654.html
Copyright © 2011-2022 走看看