题意:已知有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 ;
}

最新文章

  1. python pickle和json的区别
  2. 在Salesforce中调用外部系统所提供的的Web Service
  3. SQL保留关键字不能用作表名
  4. Windows7 x64 系统下安装 Nodejs 并在 WebStorm 9.0.1 下搭建编译 LESS 环境
  5. inline-block 和 float 的区别
  6. html 把左框的选中项添加到右框
  7. mac 下获取 os x 的系统版本,使用 oc cocoa
  8. Python try/except异常处理机制
  9. 【众秒之门 JavaScript与jQuery技术精粹 #BOOK#】第1章 初学JavaScript需知的七件事
  10. Spring 拦截器配置
  11. Jenkins 十: 访问控制
  12. dom4j解析xml字符串
  13. org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session
  14. hdu 1978 How many ways 记忆化搜索+DP
  15. NIO FileChannel
  16. pycharm 常用快捷键操作
  17. MySQL左连接时 返回的记录条数 比 左边表 数量多
  18. Java 9中的 9个 新特性
  19. 分治法及其python实现例子
  20. python退出多重循环

热门文章

  1. 国外最受欢迎的15个BT下载网站
  2. Solidity基本数据结构
  3. 复盘实战营一期毕业典礼----HHR计划----以太入门课--第一课
  4. Java中短路
  5. Vue日常报错
  6. 3_03_MSSQL课程_Ado.Net_登录复习和ExcuteScalar
  7. C12Test5 record
  8. Linux centosVMware mysql用户管理、常用sql语句、mysql数据库备份恢复
  9. C++中%d,%s,%x,%f,%.100f,%的意思
  10. 《React后台管理系统实战 零》:基础笔记