拯救莫莉斯题解

拯救莫莉斯题解

实际上是水题啦,
观察数据发现,\(m*n<=50,m<=n\),所以\(m<=sqrt(50)\)即\(m<=7\)
只可能是状压啊,搜索啊,矩阵啊
但是矩阵一般有一项非常大,大到\(O(n)\)做不了,所以基本排除,
搜索基本不可能的,毕竟吗m*n还是有50的,
所以状压,
水啊,
上代码吧:

#include<bits/stdc++.h>
using namespace std;
const int N=56,M=147;
int n,m,t,p,g[N][M],f[N][M][M],q[N][M][M],o[M],ans1=2e9,ans2=2e9;
inline int read(){
   int T=0,F=1; char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-') F=-1; ch=getchar();}
   while(ch>='0'&&ch<='9') T=(T<<3)+(T<<1)+(ch-48),ch=getchar();
   return F*T;
}
int main(){
    n=read(),m=read(),p=(1<<m)-1,memset(f,0x3f,sizeof(f));
    for(int i=0;i<m;++i) for(int j=1;j<=p;++j) if(j&(1<<i)) ++o[j];
    for(int i=1;i<=n;++i)
        for(int j=0;j<m;++j){
            t=read();
            for(int k=p;k>=1;--k) if(k&(1<<j)) g[i][k]+=t;
        }
    for(int i=0;i<=p;++i) f[1][0][i]=g[1][i],q[1][0][i]=o[i];
    for(int i=2;i<=n+1;++i)
        for(int k=0;k<=p;++k){
            for(int j=0;j<=p;++j){
                for(int w=0;w<=p;++w)
                   if(((j|k|(k<<1)|(k>>1)|w)&p)==p&&(f[i][k][j]>f[i-1][w][k]+g[i][j]||(f[i][k][j]==f[i-1][w][k]+g[i][j]&&q[i][k][j]>q[i-1][w][k]+o[j])))
                      f[i][k][j]=f[i-1][w][k]+g[i][j],q[i][k][j]=q[i-1][w][k]+o[j];
            }
        }
    for(int i=0;i<=p;++i) if(ans1>f[n+1][i][0]||(ans1==f[n+1][i][0]&&ans2>q[n+1][i][0])) ans1=f[n+1][i][0],ans2=q[n+1][i][0];
    printf("%d %d\n",ans2,ans1);
    return 0;
}

原文地址:https://www.cnblogs.com/ljk123-de-bo-ke/p/11674692.html

时间: 2024-10-01 10:02:48

拯救莫莉斯题解的相关文章

拯救莫莉斯

一道考试题:然而谁会想到我考试的时候打了一个最小费用最大流?? 真是弱爆了... 拯救莫莉斯 时间限制: 1 Sec  内存限制: 256 MB 题目描述 问题描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市(1<=x<= n, 1<=y<=m).两座城市间相邻的定义为:对于城市(Ax, Ay)和城市(Bx, By),满足(Ax - Bx)2 + (Ay

题解—— [GDOI2014]拯救莫莉斯 状压DP

题面: 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市( 1\le x\le n,1\le y\le m1≤x≤n,1≤y≤m ).两座城市间相邻的定义为:对于城市(Ax, Ay)和城市(Bx, By),满足 (Ax - Bx)^2 + (Ay - By)^2 = 1(Ax?Bx)2+(Ay?By)2=1 . 由于圣域的石油贸易总量很大,莫莉斯意识到不能让每笔石油订购单都

拯救莫莉斯[GDOI2014]

时间限制:1s     内存限制:256MB 问题描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市(1<=x<= n, 1<=y<=m).两座城市间相邻的定义为:对于城市(Ax, Ay)和城市(Bx, By),满足(Ax - Bx)2 + (Ay - By)2 = 1. 由于圣域的石油贸易总量很大,莫莉斯意识到不能让每笔石油订购单都从同一个油库里发货.为

GDOI2014 拯救莫莉斯

问题描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市(1<=x<= n, 1<=y<=m).两座城市间相邻的定义为:对于城市(Ax, Ay)和城市(Bx, By),满足(Ax - Bx)2 + (Ay - By)2 = 1. 由于圣域的石油贸易总量很大,莫莉斯意识到不能让每笔石油订购单都从同一个油库里发货.为了提高效率,莫莉斯·乔决定在其中一些城市里建造

暑假集训D13总结

考试 又炸掉了= = 本来看着题就一脸茫然,默默的打暴力骗分,然后就交了卷= = 重要的是,在本机跑的毫无障碍的T3程序竟然在评测机CE啊喂,35分就没了啊喂(这可是比我现在分还高= =) 内心几近崩溃= = 题解: T1 [Codeup 25481] swan T2 [Codeup 25482 ]选美 T3 拯救莫莉斯 刷题 今天改题改的还算顺利= = 最后还帮助某byb调了一个鬼畜的判断= =(到现在都不知道为啥这个判断会炸) 被数组越界坑到死= = 博客 技术贴竟然成功破百了= =,莫名欢

2017/8/6 考试吐槽

2016 8 6 成绩:20 (既然翻车了就多扯几句,反正也不怕什么,都是自己人) 得知成绩的一刻瘫倒在了地上--满怀希望的一场考试竟是这样的一场大翻车--只能用惨烈形容了--我菜爆了--一天天依赖STL都有毒啊--我说啥啊--能说的全卡在嗓子眼出不来啊--我真--菜的抠脚!唉--全都考好了,自己弱也怪不得出题人--算了先到这里,先开始口胡 A.天鹅会面 首先贴出一个英吹四艇的OJ上的链接:http://codeup.hustoj.com/problem.php?id=25481&csrf=5d

luogu3888 GDOI2014拯救莫里斯 (状压dp)

题目描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市\(( 1\le x\le n,1\le y\le m)\).两座城市间相邻的定义为:对于城市(Ax, Ay)和城市(Bx, By),满足 (Ax - Bx)^2 + (Ay - By)^2 = 1(Ax?Bx)2+(Ay?By)2=1 . 由于圣域的石油贸易总量很大,莫莉斯意识到不能让每笔石油订购单都从同一个油库里

2016年“计蒜客”杯华中师范大学第十四届程序设计竞赛题解

A. 寻找字符串 对于一个字符串 s,定义一个函数 S(x),表示 s 中有多少个子串 x.现在给定 S(a),S(b),S(ab),S(ba)的值,求满足这 4 个值的字符串 s,如果有多个满足条件的字符串,输出字典序最小的. s 中仅可能含有字符 a 和 b. 任何一个串的 S(ab) 与 S(ba) 的相差都不会超过1.可以分 S(ab)-S(ba) 为 0 -1 1 三种情况讨论.先构造出相应的 ab 相邻的串,再考虑按照字典序最小出要求将剩余的字母插入串中即可. 应该注意,这道问题有很

题解小合集——第一弹

(转载于我的洛谷博客) 索引: 第一题:P2552 团体操队形 第二题:P3146 248 第三题:P3147 262144 第四题:P1972 花花的项链 第五题:P1484 种树 第六题:P5132 Cozy Glow之拯救小马国 第七题:P1198 最大数 第八题:P2023 维护序列 第九题:P1967 货车运输 第十题:P1313 计算系数 第一题:P2552 团体操队形 题解思路:大模拟,仔细点就好 这道题以一个点需要注意--就是梅花桩队形的奇数排列和偶数排列的规律是略有不同的 奇数