UVALive 6853(dp)
2024-09-07 02:10:25
题意:已知有n个城市,某歌手每月进行一场演唱会,共持续c个月,可连续两个月在同一个城市。城市间的路费已给出,且已知每个城市在第k(1<=k<=c)个月举办演唱会的所得利润,求最终的最大利润。
分析:第i个月在第j个城市举办演唱会,最终可得最大利润,由此可得状态转移方程:dp[i][j] = max(dp[i][j], dp[i - 1][k] - d[k][j] + a[j].v[i])。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cmath>
using namespace std;
const int MAXN = + ;
struct
{
int v[];
}a[MAXN];
int d[MAXN][MAXN];
int dp[MAXN][MAXN];
int main()
{
int n;
scanf("%d", &n);
while(n--)
{
memset(d, , sizeof d);
memset(dp, , sizeof dp);
int s, c;
scanf("%d%d", &s, &c);
for(int i = ; i <= s; ++i)
for(int j = ; j <= c; ++j)
scanf("%d", &a[i].v[j]);
for(int i = ; i <= s; ++i)
for(int j = ; j <= s; ++j)
scanf("%d", &d[i][j]);
for(int i = ; i <= s; ++i)
dp[][i] = a[i].v[];
for(int i = ; i <= c; ++i)
for(int j = ; j <= s; ++j)
for(int k = ; k <= s; ++k)
dp[i][j] = max(dp[i][j], dp[i - ][k] - d[k][j] + a[j].v[i]);
int ans = ;
for(int i = ; i <= s; ++i)
ans = max(ans, dp[c][i]);
printf("%d\n", ans);
}
return ;
}
最新文章
- python pickle和json的区别
- 在Salesforce中调用外部系统所提供的的Web Service
- SQL保留关键字不能用作表名
- Windows7 x64 系统下安装 Nodejs 并在 WebStorm 9.0.1 下搭建编译 LESS 环境
- inline-block 和 float 的区别
- html 把左框的选中项添加到右框
- mac 下获取 os x 的系统版本,使用 oc cocoa
- Python try/except异常处理机制
- 【众秒之门 JavaScript与jQuery技术精粹 #BOOK#】第1章 初学JavaScript需知的七件事
- Spring 拦截器配置
- Jenkins 十: 访问控制
- dom4j解析xml字符串
- org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session
- hdu 1978 How many ways 记忆化搜索+DP
- NIO FileChannel
- pycharm 常用快捷键操作
- MySQL左连接时 返回的记录条数 比 左边表 数量多
- Java 9中的 9个 新特性
- 分治法及其python实现例子
- python退出多重循环
热门文章
- 国外最受欢迎的15个BT下载网站
- Solidity基本数据结构
- 复盘实战营一期毕业典礼----HHR计划----以太入门课--第一课
- Java中短路
- Vue日常报错
- 3_03_MSSQL课程_Ado.Net_登录复习和ExcuteScalar
- C12Test5 record
- Linux centosVMware mysql用户管理、常用sql语句、mysql数据库备份恢复
- C++中%d,%s,%x,%f,%.100f,%的意思
- 《React后台管理系统实战 零》:基础笔记