首页 > 其他分享 >石子合并问题

石子合并问题

时间:2023-04-02 10:48:40浏览次数:49  
标签:int rep 石子 合并 len 问题 1e9 sum

相邻石子合并问题

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i = a; i <= n; i++)
const int N = 330;
int sum[N];
int a[N];
int f[N][N];//从i到j合并石子所付出的最小代价

int main(){
    int n;cin>>n;
    rep(i,1,n){
        cin >> a[i];
        sum[i] += sum[i - 1] + a[i];
    }
    rep(len,2,n){//长度
        rep(i,1,n- len + 1){//左端点
            int l = i, r = i + len - 1;//右端点
            f[l][r] = 1e9;//初始化为最大值
            rep(k,l,r -1){
                f[l][r] = min(f[l][r], f[l][k] + f[k + 1][r] + sum[r] - sum[l - 1]);//动态规划
            }
        }
    }
    cout << f[1][n] << endl;
    return 0;
}

环形石子合并问题


#include<iostream>
using namespace std;
#define rep(i,a,n) for(int i = (a); i <= (n); i++)
const int N = 500;
int f[N][N],v[N][N];
int a[N],sum[N];

int main(){
	int n; cin >> n;
	rep(i,1,n){
		cin >> a[i];
		a[i + n] = a[i];
	}
	rep(i,1,2 * n){
		sum[i] = sum[i - 1] + a[i];
	}
	rep(len,2,n){
		rep(l,1,2 * n - len + 1){
			int r = l + len - 1;
			f[l][r] = 1e9;
			rep(k,l,r - 1){
				f[l][r] = min(f[l][r],f[l][k] + f[k + 1][r] + sum[r] - sum[l - 1]);
				v[l][r] = max(v[l][r],v[l][k] + v[k + 1][r] + sum[r] - sum[l - 1]);
			}
		}
	}
	int ans1 = 1e9, ans2 = 0;
	for(int i = 1; i <= n; i++){
		ans1 = min(ans1,f[i][i + n - 1]);
		ans2 = max(ans2,v[i][i + n - 1]);
	}
	cout << ans1 << endl;
	cout << ans2;
	return 0;
}

标签:int,rep,石子,合并,len,问题,1e9,sum
From: https://www.cnblogs.com/index-12/p/17280022.html

相关文章

  • 23. 合并 K 个升序链表
    23.合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链......
  • AcWing 2. 01背包问题
    有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个......
  • Qt音视频开发33-vlc和mpv打开后鼠标打圈圈问题的解决
    一、前言如果采用的vlc句柄模式,如果鼠标停留在句柄控件中会发现在打开后鼠标打圈圈,mpv句柄模式是在关闭后鼠标打圈圈,这两者真是一前一后,这种给人的体验其实很不友好的,播放开始后或者播放完成后鼠标指针居然变成了繁忙,但是当你将鼠标位置从句柄控件中移到外面的时候,他又会自动恢复......
  • Python异常 ValueError的问题详解
    导读这篇文章主要介绍了Python异常ValueError的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教Python异常ValueErrorValueError:invalidliteralforint()withbase10:'*'试图将一个与数字无关的类型转化为整数,会抛出该异常。......
  • 对于两个html页面之间无法实现跳转,但是单独出现却可以的问题的解决
    问题描述不知道为什么,我的两个html页面之间无法实现跳转,但是单独打出来就是可以,上网查了查相关的解决方法问题解决在a标签里面,加上一个target属性,命名为-blank,然后就可以实现正常跳转啦!......
  • 2023-04-01 图论问题建模和floodfill
    图论问题建模和floodfillfloodfill(洪泛)实际就是图的遍历1图论问题例子:判断二分图题目来源:LeetCode785is-graph-bipartite:,判断二分图,因为题目中已经给出了邻接表,相当于已经给出了Graph,所以直接用二分图的核心算法即可,参考DFS实现二分图检测实现代码2图的建模和二......
  • 景区灭火问题——图形处理,最短路径
    景区灭火问题                                              ......
  • uni-simple-router路由组件的使用问题
    1、uni-simple-router路由组件导致无法使用eventChannel进行页面跳转传值——使用路由导航传值2、导致onBackPress事件被阻止一次后失效——使用路由暴力解锁。constrouter=createRouter({ platform:process.env.VUE_APP_PLATFORM, detectBeforeLock:(router,to,nav......
  • 解决VSCode终端中禁止运行脚本问题的一种方式
    1.右击VSCode图标,选择以管理员身份运行;2.在终端中执行get-ExecutionPolicy,显示Restricted,表示状态是禁止的;3.这时执行set-ExecutionPolicyRemoteSigned;4.此时再执行get-ExecutionPolicy,显示RemoteSigned,则表示状态解禁,可以运行......
  • 企业在订单管理中可能遇到的问题
    在日常订单管理中,企业可能会遇到以下一些问题:订单信息不够准确:企业可能会收到顾客提供的不准确或不完整的订单信息,导致订单处理出现错误或延误。订单处理时间长:传统的订单处理流程可能需要员工手动输入订单信息,审核订单并安排生产、配送等,耗费大量时间和人力资源。缺乏订......