关于动态规划(Dynamic Programming)的若干思考 ------ [4.坐标dp]

1单层 2多层 3也是多层但需要高精(int128也能过)
3个题本质上都是区间dp

矩形取数<1>

领域展开
#include<bits/stdc++.h>
#define ll __int128 
const int maxn=6666; 
using namespace std;
ll f[maxn][maxn],p[maxn];
int a[maxn];
ll ans;
int n;
void out(ll x)
{
	if(x==0) return;
	if(x) out(x/10);
	putchar(x%10+'0');
}
int main()
{
	cin >> n;
	for(int i=1;i<=n;i++) cin>>a[i];
	p[0]=1;
	for(int i=1;i<=n;i++) p[i]=p[i-1]<<1;
	for(int i=1;i<=n;i++)
		for(int j=n;j>=i;j--)
			f[i][j]=max(f[i-1][j]+p[n-j+i-1]*a[i-1],f[i][j+1]+p[n-j+i-1]*a[j+1]);
	for(int i=1;i<=n;i++)
		ans=max(ans,f[i][i]+a[i]*p[n]);
	if(ans==0) cout << 0;
	else out(ans);
	return 0;
}

矩形取数<2>

领域展开
#include<bits/stdc++.h>
#define ll __int128 
const int maxn=6666; 
using namespace std;
ll f[maxn][maxn],p[maxn];
int a[maxn];
ll ans;
int n;
void out(ll x)
{
	if(x==0) return;
	if(x) out(x/10);
	putchar(x%10+'0');
}
int main()
{
	cin >> n;
	for(int i=1;i<=n;i++) cin>>a[i];
	p[0]=1;
	for(int i=1;i<=n;i++) p[i]=p[i-1]<<1;
	for(int i=1;i<=n;i++)
		for(int j=n;j>=i;j--)
			f[i][j]=max(f[i-1][j]+p[n-j+i-1]*a[i-1],f[i][j+1]+p[n-j+i-1]*a[j+1]);
	for(int i=1;i<=n;i++)
		ans=max(ans,f[i][i]+a[i]*p[n]);
	if(ans==0) cout << 0;
	else out(ans);
	return 0;
}

矩形取数<3>

领域展开
#include<bits/stdc++.h>
#define ll __int128
using namespace std;
const int maxn=666;
ll f[maxn][maxn],p[maxn];
int n,m,a[maxn];
ll ans;
void out(ll x)
{
    if (x==0) return;
    if (x) out(x/10);
    putchar(x%10+'0');
}
ll dp()
{
    memset(f,0,sizeof(f));
    for(int i=1;i<=m;i++)
        for(int j=m;j>=i;j--)
            f[i][j]=max(f[i-1][j]+p[m-j+i-1]*a[i-1] , f[i][j+1]+p[m-j+i-1]*a[j+1]);
    ll tot=0;
    for(int i=1;i<=m;i++) tot=max(tot,f[i][i]+a[i]*p[m]);
    return tot;
}
int main()
{
  	cin >> n >> m;
  	p[0]=1;
	for(int i=1;i<=m;i++) p[i]=p[i-1]<<1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)  
		 scanf("%d",a+j);
        ans+=dp();
    }
    if(ans==0) cout << 0;
	else out(ans);
    return 0;
}
posted @   十萧  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示