题意

有n个车站,现在有一辆火车从1到n驶过,给出aij代表从i站上车j站下车的人的个数。列车行驶过程中你有K次检票机会,所有当前在车上的人会被检票,问最多能检多少个不同的人的票

(n<=600,k<=50)

题解

一开始没啥思路,然后瞄了一眼题解。看到了前缀和然后就想前缀和的意义。

结果又没什么收获。绝望之际想到我瞄的那一眼,看到矩阵是倒着的,然后就有了思路。

DP也就轻而易举地想出来了。

我们建立以左上为原点的前缀和。

然后sum[i][i+1]表示的就是经过i号站点的人数。

然后dp[i][j]代表前i个车站以第i个车站为第j个选择的车站的最优解。

方程:

dp[i][j]=max(dp[i][j],dp[x][j-1]+sum[i][i+1]-sum[x][i+1])(0<=x<i)

然后记录dp[i][j]从哪里转移就可以得到答案了。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
int n,k,a[N][N],sum[N][N],dp[N][],ans,num,ans1,ans2[],from[N][];
int main(){
scanf("%d%d",&n,&k);
num=k;
for(int i=;i<=n;i++){
for(int j=;j<=n-i;j++){
scanf("%d",&a[i][j+i]);
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
for(int i=;i<=n;i++){
for(int j=n;j>=;j--){
sum[i][j]=sum[i-][j]+sum[i][j+]-sum[i-][j+]+a[i][j];
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout<<sum[i][j]<<" ";
// }
// cout<<endl;
// }
for(int i=;i<=n;i++)
for(int j=;j<=k;j++){
dp[i][j]=-;
}
dp[][]=;
for(int i=;i<=n;i++)
for(int j=;j<=min(i,k);j++)
for(int x=;x<i;x++){
if(dp[i][j]<dp[x][j-]+sum[i][i+]-sum[x][i+]){
dp[i][j]=dp[x][j-]+sum[i][i+]-sum[x][i+];
from[i][j]=x;
}
}
for(int i=k;i<=n-;i++){
if(ans<dp[i][k]){
ans1=i;
ans=dp[i][k];
}
}
// cout<<ans<<endl;
while(ans1){
ans2[num]=ans1;
ans1=from[ans1][num];
num--;
}
for(int i=;i<=k;i++){
printf("%d ",ans2[i]);
}
return ;
}

最新文章

  1. 『.NET Core CLI工具文档』(十四)dotnet-install 脚本参考
  2. UNITY自带的3D object没有三角形?
  3. linux Makefile obj-m obj-y
  4. iOS-性能优化2
  5. NEC学习 ---- 模块 - 带点文字链接列表
  6. C++文本的读取和写入
  7. SQL同列合并
  8. win7系统电脑连接小米蓝牙音箱
  9. 【转】larbin主要代码说明
  10. 服务端调用js:javax.script
  11. github修改自己的昵称
  12. BZOJ_2600_[Ioi2011]ricehub_二分答案
  13. Python——编译标准
  14. table-cell width:1% 深入理解
  15. SpringBoot+Mybatis+Maven+MySQL逆向工程实现增删改查
  16. asp.net mvc或者其他程序无法打开excel——解决方案,C#处理Excel文件
  17. linux上启动tomcat远程不能访问
  18. svnkit https 忽略证书认证
  19. [codechef July Challenge 2017] IPC Trainers
  20. 岛屿的个数12 &#183; Number of Islands 12

热门文章

  1. TortoiseGit连接github.com
  2. ikbc 时光机 F87 Ctrl 失灵 解决办法
  3. [Java] Protect, Private and Public的区别
  4. python的数据类型转换
  5. freemarker加载模板文件的
  6. [arc067f]yakiniku restaurants
  7. js递归获取html页面所有标签
  8. 红黑树(RBTREE)之上-------构造红黑树
  9. py_One
  10. python学习--导入自己的包