
You Are The One
发布日期:2021-05-08 16:30:24
浏览次数:23
分类:精选文章
本文共 1287 字,大约阅读时间需要 4 分钟。
n个人参加节目,每人都有一个自己的不高兴值
如果他第k个上场,那么他的不高兴值为(k−1) * a[i] 第 k 个等待的人不高兴值成 ( k - 1 ) * a[i],有一个小黑屋可以暂时存放一些人,让他们晚点上台,进去的越早出来的越晚,但显然越晚,不高兴值越大,求最小的总不高兴值。那么第i个人可以在第一个、第二个位置等等出场…直到j+i-1
我们用d[i][j]来存储第i个人到第j个人能得到的最小的不高兴值假设第i个人的花费是k * a[i],则它在这一区段中是第k+i个上场的(以i开始的)
那么就可以分两段,d[i+1][i+k−1]和d[i+k][j] 由于小黑屋的先进后出 所以排在i后面的i+k到j个人要先上,只需要原来的花费 而排在i前面的i+1到i+k-1要后上,所以花费要更多一些,即加上k * (sum[j]-sum[i+k-1])) //这一区段的a[i]值的和✖️k最后转移方程为:
d[i][j] = min( d[i[j],d[i+1][i+k-1]+d[i+k][j]+a[i] *( k-1)+k * (sum[j]-sum[i+k-1]))#include#include #include using namespace std;#define mann 0x3f3f3f3fint a[105],sum[105];int d[105][105],n,t;int main(){ int s = 1; cin >> t; while( t-- ) { cin >> n; sum[0]=0; memset(d,0,sizeof(d)); for(int i=1; i<=n; i++) { cin >> a[i]; sum[i] = sum[i-1]+a[i];//提前记录每一区段的花费的原值的总和,前缀和 } for(int len=2; len<=n; len++) { for(int i=1,j = i+len-1; j<=n; i++,j++) { d[i][j] = mann; for(int k=1; k<=len; k++) { d[i][j] = min( d[i[j],d[i+1][i+k-1]+d[i+k][j]+a[i]*(k-1)+k*(sum[j]-sum[i+k-1])); } } } cout <<"Case #"< <<": " <<
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月11日 19时29分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2021年N1叉车司机模拟考试及N1叉车司机考试软件
2019-03-15
【奇淫巧技】Java动态代理(JDK和cglib)
2019-03-15
【Stimulsoft Reports.Net教程】使用DesignerFx
2019-03-15
攻防世界 Pwn 新手
2019-03-15
mybtis-plus 出现 Wrong namespace
2019-03-15
升级java11后,maven命令打包报错
2019-03-16
springboot redis key乱码
2019-03-16
Win10禁用自带的笔记本键盘
2019-03-16
insmod模块的几种常见错误
2019-03-16
写时复制集合 —— CopyOnWriteArrayList
2019-03-16
什么是redis的缓存雪崩, 穿透, 击穿?
2019-03-16
【转载】DSP基础--定点小数运算
2019-03-16
idea thymeleaf页面变量报错解决
2019-03-16
云游戏,打响5G第一战
2019-03-16
Docker 拉取镜像速度太慢
2019-03-16
【毕设-STM32f103寄存器版本】智能防盗系统
2019-03-16
勒索病毒Kraken2.0.7分析
2019-03-16
MySQL错误1366处理方法
2019-03-16