栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2430 Lazy Cows

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2430 Lazy Cows

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;int dp[2][1001][4];int xp[2][1001];int n,K,m;int cur, nex;struct Node {    int x, y;    bool operator < (const Node & tt) const {        if(y == tt.y) return x < tt.x;        return y < tt.y;    }}node[1001];void tomin(int &a, int b) { if(a > b) a = b; }int main() {    scanf("%d%d%d", &n, &K, &m);    memset(dp, INF, sizeof(dp));    memset(xp, INF, sizeof(xp));    dp[0][0][0] = 0;    for(int i = 1; i <= n; i ++) {        scanf("%d%d", &node[i].x, &node[i].y);    }    sort(node+1, node+n+1);    int tot = 1;    for(int i = 2; i <= n; i ++) {        if(node[i].y == node[i-1].y) node[tot].x = 3;        else node[++tot] = node[i];    }    n = tot;    node[0].y = node[1].y - 1;    cur = 0, nex = 1;    for(int i = 1; i <= n; i ++) {        int dis = node[i].y - node[i-1].y;        for(int j = 0; j <= K; j ++) { for(int s = 1; s < 4; s ++) if((s&node[i].x) == node[i].x) {     int cnt = 0;     for(int r = 0; r < 2; r ++) if(s&(1<<r)) cnt ++;     tomin(dp[nex][j][s], dp[cur][j][s] + cnt * dis); } tomin(xp[nex][j], xp[cur][j] + 2 * dis); for(int k = 0; k < 4; k ++) {     int cnt = 0;     for(int r = 0; r < 2; r ++) if(k&(1<<r)) cnt ++;     if(node[i].x == k) tomin(dp[nex][j][k], xp[cur][j] + cnt * dis); }        }        for(int j = 1; j <= K; j ++) { for(int ns = 1; ns < 4; ns ++) if((ns&node[i].x) == node[i].x) {     int cnt = 0;     for(int r = 0; r < 2; r ++) if(ns&(1<<r)) cnt ++;     tomin(dp[nex][j][ns], xp[cur][j-1] + cnt);     for(int s = 0; s < 4; s ++) {         tomin(dp[nex][j][ns], dp[cur][j-1][s] + cnt);     } } tomin(xp[nex][j], dp[cur][j-1][1] + dis + 1); tomin(xp[nex][j], dp[cur][j-1][2] + dis + 1); if(j >= 2) for(int s = 0; s < 4; s ++) {     tomin(xp[nex][j], dp[cur][j-2][s] + 2); }        }        cur = nex, nex = !cur;        memset(dp[nex], INF, sizeof(dp[nex]));        memset(xp[nex], INF, sizeof(xp[nex]));    }    int minx = INF;    for(int s = 0; s < 4; s ++) tomin(minx, dp[cur][K][s]);    tomin(minx, xp[cur][K]);    printf("%dn", minx);    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/364157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号