首页 > 其他分享 >棋盘DP

棋盘DP

时间:2023-11-14 10:24:44浏览次数:27  
标签:第一遍 DP int cin mp 棋盘 dp

主要是在棋盘上的DP,棋盘上每个点的转移状态基本上都是已知的

//https://www.luogu.com.cn/problem/P1004

//首先提供二维dp,二维dp的思路为ij表示i行j列时的可以取得最大值
//类似于贪心,先进行第一遍循环,取到最优,然后把第一遍取的数全变为0,再进行第二遍的取
//但是这种方法并不一定是全局的最优解

//0    0    2    3    0    0    0
//0    0    3    0    0    0    0
//0    0    3    0    0    0    0
//0    0    0    0    0    0    0
//0    0    0    0    4    0    0
//0    0    0    0    4    0    0
//0    0    0    0    4    0    0
//如图,走第一遍可得出终点时最大值为20,去掉已经走过的点后图如下:                        
//0    0    0    3    0    0    0
//0    0    0    0    0    0    0
//0    0    0    0    0    0    0
//0    0    0    0    0    0    0
//0    0    0    0    0    0    0
//0    0    0    0    0    0    0
//0    0    2    0    0    0    0 
//然后会发现我们无法全部走完,也正符合贪心策略,“只注重眼前的利益”,因此此题使用二维dp绝非正解,上代码:
#include<bits/stdc++.h>
using namespace std;
const int N=10;
int dx[]={0,1},dy[]={1,0},n,mp[N][N];
int dp[N][N],res,ans;
int main()
{
    cin>>n;
    int a,b,c;
    while(cin>>a>>b>>c&&a+b+c>0) mp[a][b]=c;
//    for(int i=1;i<=n;i++){
//        for(int j=1;j<=n;j++) cout<<mp[i][j]<<' ';
//        cout<<endl;
//    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            dp[i][j]=max(dp[i-1][j]+mp[i][j],dp[i][j-1]+mp[i][j]);
    res=dp[n][n],ans=dp[n][n];
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(dp[i][j]==res&&dp[i][j]!=0) res-=mp[i][j],mp[i][j]=0,i=0,j=0;
        }
    }
    memset(dp,0,sizeof dp);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            dp[i][j]=max(dp[i-1][j]+mp[i][j],dp[i][j-1]+mp[i][j]);
    cout<<ans+dp[n][n];
    return 0;
}

//正确思路:  
//四维dp,用ijkl表示思维,ij表示第一遍走的,kl表示第二遍走的,然后进行n^4的dp
//如果遇到相同的点就直接减去 
#include<bits/stdc++.h>
using namespace std;
const int N=10;
int n,m,dp[N][N][N][N],mp[N][N];
int main()
{
    cin>>n;
    int a,b,c;
    while(cin>>a>>b>>c&&a+b+c>0) mp[a][b]=c;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
                for(int l=1;l<=n;l++){
                    dp[i][j][k][l]=max(max(dp[i-1][j][k-1][l],max(dp[i-1][j][k][l-1],dp[i][j-1][k][l-1])),dp[i][j-1][k-1][l])+mp[i][j]+mp[k][l];
                    if(i==k&&j==l) dp[i][j][k][l]-=mp[k][l];
                }
    cout<<dp[n][n][n][n];
    return 0;
}

 

标签:第一遍,DP,int,cin,mp,棋盘,dp
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17831019.html

相关文章

  • wordpress SQL
     UPDATEwp_postsSETpost_content=REPLACE(post_content,"192.168.120.126:8000","计算机名:8000")  WHEREid=10 ;   修改ip地址后,导致图片失效 报语法错,跟mysql版本没有关系。   更改ip和切换主题都会导致文章排版和图片问题。有些主题是用markdown,有......
  • ubuntu:dpkg操作deb包(23.10)
    一,查看某个文件所属的deb包:root@lhdpc:/usr/local/source/Python-3.12.0#dpkg-S/usr/bin/python3python3-minimal:/usr/bin/python3二,查看dpkg的版本号root@lhdpc:/usr/local/source/Python-3.12.0#dpkg--versionDebiandpkg软件包管理程序1.22.0(amd64)版。......
  • 如何给 Spartacus 的 CSR 和 SSR 配置不同的 OCC endpoint
    SAP官方文档里,对CommerceCloudComposableStorefront的occendpoint配置说明的例子如下:provideConfig(backend:{occ:{baseUrl:'https://some.baseUrl.com'},},}),那么如果想为SSR和CSR两种运行方式,配置不同的o......
  • 浅谈斜率优化DP
    前言考试T2出题人放了个树上斜率优化DP,直接被同校OIER吊起来锤。离NOIP还有不到一周,赶紧学一点。引入斜率斜率,数学、几何学名词,是表示一条直线(或曲线的切线)关于(横)坐标轴倾斜程度的量。它通常用直线(或曲线的切线)与(横)坐标轴夹角的正切,或两点的纵坐标之差与横坐标之差的......
  • WordPress主题警告:侧边栏字符串偏移非法
    "侧边栏字符串偏移非法"警告通常是由于在WordPress主题的侧边栏中使用了不正确的代码或字符引起的。这可能是一个语法错误、字符编码问题或标签的闭合问题。要解决这个问题,可以尝试以下几个步骤:1.检查语法错误:打开你的WordPress主题文件,找到侧边栏的相关代码,并确保没有任何语法错......
  • DP4301-M无线模块一款SUB-1G无线收发模块无线抄表智能家居手持设备
    DP4301-M无线模块是一款低成本高效率工作于1GHz以内的收发模块,支持中国智能电无线集抄标准470MHz~510MHz,兼容433MHzISM/SRD频段均可使用。此模块且前已经超大量应用于国标智能无线抄表及物联网自组网等双向数据传输系统方案,模块具备的低功耗、高接收灵敏度、高发射功率诸多优......
  • 虚拟机,宝塔面板,wordpress
    1.进入并安装宝塔面板,linux面板安装脚本;2.选择对应的Linux版本,复制命令到虚拟机命令行执行;编者用的是centos,选择第一个脚本;3.安装结束后,会得到如下信息,复制内网面板地址,在运行虚拟机的主机上的浏览器中,进入该地址,输入对应的用户名username,密码password;安装插件选择对应的LNMP......
  • AMDP
    CDS @ClientHandling.type:#[email protected]:#[email protected]:[email protected]:#RANGEdefinetablefunctionztest_cds_026withparameterscarrid:s_carr_idretu......
  • P1077-DP【黄】
    昨天好几道题没做出来很郁闷,结果今天上来半小时不到就直接做出一道黄DP题了,不错,又有写题的冲动了。这道题我一直被那个“因为方案数可能很多,请输出方案数对1000007取模的结果。”这句话吓到了,因为我在想如果涉及求最优方案,那么势必会有比较,那么既然取了摸还怎么比较啊?不会另要开......
  • 区间DP
    一.定义即对于一个区间进行的dp二.经典转移方程1.枚举断点型f[l][r]=min(f[l][k-1],f[k][r])(l+1<=k<=r)2.左右端点型f[l][r]=min(f[l][r-1],f[l+1][r])3.有一定条件型f[l][r][k]=f[l][r-1][k-1]+f[r][r][0]三.主要思想1.遇到环时,破环为链,转化为区间求解2.区间由短到......