Wannafly挑战赛26 B 冥土追魂
首先,证明结果一定是取某些整行,再加上一个多余的一行的前几个。
假如:
x1<=x2<=x3<=x4<=x5
y1<=y2<=y3<=y4<=y5
取6个,最优解是取x3,x4,x5,y3,y4,y5。那么:
(1)如果y3>=x2,那么y3+y4>=x1+x2。就取掉y3,y4取x1,x2更优。
(2)如果y3<x2,那x3就>y2,那就去掉x3,x4取y1,y2更优。
因此结果不会出现2行不整的。给出条件了,那么要取的整行的数量也确定了。多出来几个(记为k)也确定了。那用sum[i]记录该行取整行时,maxk[i]记录该行取最大的k个时的结果。问题在于,一行被作为整行了就不能作为前k个了。这样不能贪心,能举反例。
比如
1 1 1 1
0 0 0 5
取5个。
这样只能dp了。dp[i][j][0]记录前i行,取了j个整行,还没取多余行的最小。dp[i][j][1]记录前i行,取了j个整行,已经取多余行的最小。那么第i行能作为整行取,dp[i][j][0]=dp[i-1][j-1][0]+sum[i]。也能不取,说明i-1行时已经有j个整行了。也能作为多余行取。注意开始时将不能到的点解决一下,给个大的值。
//#pragma comment(linker,"/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include <stack>
#include <iomanip>
using namespace std;
typedef long long lon;
const lon SZ=,INF=0x7FFFFFFF;
const double EPS=1e-;
vector<lon> vct[];
lon sum[],maxk[];
lon dp[][][]; int main()
{
//std::ios::sync_with_stdio(0);
//freopen("d:\\1.txt","r",stdin);
//for(;scanf("%d",&n)!=EOF;)
{
lon n,m,k;
cin>>n>>m>>k;
lon rem=k%m,num=k/m;
for(lon i=;i<=n;++i)
{
vct[i].assign(m,);
for(lon j=;j<m;++j)cin>>vct[i][j],sum[i]+=vct[i][j];
sort(vct[i].begin(),vct[i].end(),greater<lon>());
//for(int j=0;j<vct[i].size();++j)cout<<vct[i][j]<<" ";
//cout<<vct[i].size()<<" "<<endl;
for(lon j=;j<rem;++j)maxk[i]+=vct[i][j];
//cout<<maxk[i]<<endl;
}
memset(dp,0x3f,sizeof(dp));
//for(lon i=0;i<=num;++i)dp[0][i][1]=0x3f3f3f3f,dp[0][i][0]=0x3f3f3f3f;
dp[][][]=;
for(lon i=;i<=n;++i)
{
for(lon j=;j<=min(i,num);++j)
{
if(j==)dp[i][j][]=;
else dp[i][j][]=min(dp[i-][j][],dp[i-][j-][]+sum[i]);
dp[i][j][]=min(dp[i-][j][],dp[i-][j][]+maxk[i]);
dp[i][j][]=min(dp[i][j][],dp[i-][j-][]+sum[i]);
//cout<<i<<" "<<j<<" "<<dp[i][j][0]<<" "<<dp[i][j][1]<<" "<<maxk[i]<<endl;
}
}
if(rem==)cout<<dp[n][num][]<<endl;
else cout<<dp[n][num][]<<endl;
}
return ;
}
Wannafly挑战赛26 B 冥土追魂的更多相关文章
- Wannafly挑战赛26题解
为啥混进了几道不是魔禁的题--出题人太不敬业了-- 传送门 \(A\) 御坂网络 为啥没有番外个体和整体意志呢 暴力模拟就好了,这个要是都打错我干脆滚回去学文化课算了 //minamoto #incl ...
- Wannafly 挑战赛 19 参考题解
这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...
- 牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树)
牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树) 链接:https://ac.nowcoder.com/acm/problem/15706 现在需要您来帮忙维护这个名册, ...
- Wannafly挑战赛25游记
Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- Wannafly挑战赛21A
题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...
- Wannafly挑战赛24游记
Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...
- Wannafly挑战赛25C 期望操作数
Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...
- Wannafly挑战赛18B 随机数
Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...
随机推荐
- html的初了解(更新中···)
(注:在学习时要养成一个良好的习惯,即每次写完都随手保存,快捷键为ctrl+s.即每次写完都随手点一下ctrl+s.) html是万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言. 网页的 ...
- Linux电源管理(五)thermal【转】
本文转载自:https://blog.csdn.net/zhouhuacai/article/details/78172267 版权声明:本文为博主原创文章,未经博主允许不得转载. https: ...
- fedora23安装搜狗輸入法?
1, 安裝方法, 是通過下載 repo文件, 添加repo文件, 然後通過dnf啦安裝的. repo文件地址是: fedora 的中文社區: https://www.fdzh.org/ fdzh: 就 ...
- vim使用跳转列表 jumps 来跟踪 (历史位置的)导航
参考: Vim使用跳转列表来跟踪你的导航,你可以通过这个列表来向前或者向后导航. 跳转列表保留所有地方的轨迹,它可以跟踪文件名.行号和列号. 查看调整列表::jumps 导航键 描述 CTRL-o 跳 ...
- 题解——code[vs] 1506 传话(传递闭包)
裸的传递闭包 直接Floyd暴力即可 #include <cstdio> #include <algorithm> #include <cstring> using ...
- 使用closest替换parent
尽量不要使用parent去获取DOM元素,如下代码: var $activeRows = $this.parent().parent().children(".active"); ...
- js try catch 的使用,容错处理
tag: js try catch 的使用,js容错处理 网友回答: try{ //正常执行 }catch(e/*你感觉会出错的 错误类型*/){ // 可能出现的意外 eg:用户自己操作失误 或者 ...
- HttpUrlConnection底层实现和关于java host绑定ip即时生效的设置及分析
最近有个需求需要对于获取URL页面进行host绑定并且立即生效,在java里面实现可以用代理服务器来实现:因为在测试环境下可能需要通过绑定来访问测试环境的应用实现代码如下: public static ...
- 一步到位之INNODB
原文链接:http://imysql.com/2012/09/21/mysql-faq-setup-innodb-quickly.html 快速认识InnoDB InnoDB是MySQL下使用最广泛的 ...
- android 利用CountDownTimer实现时分秒倒计时效果
https://blog.csdn.net/mrzhao_perfectcode/article/details/81289578