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_{ ...
随机推荐
- 转载:Systemd 服务配置文件
目录 一.开机启动 二.启动服务 三.停止服务 四.读懂配置文件 五. [Unit] 区块:启动顺序与依赖关系. 六.[Service] 区块:启动行为 6.1 启动命令 6.2 启动类型 6.3 重 ...
- 卸载linux系统上自带的mysql
步骤: 1.打开centos命令提示符,切换为root用户 2.输入rpm -qa|grep -i mysql命令以检查系统含有的mysql插件,回车,若没有则说明无自带mysql,系统很干净.若有显 ...
- Attribute2Image --- Conditional Image Generation from Visual Attributes 论文笔记
Attribute2Image --- Conditional Image Generation from Visual Attributes Target: 本文提出一种根据属性生成图像的产生式模 ...
- Kylin知识点介绍
Kylin is an open source Distributed Analytics Engine from eBay Inc.that provides SQL interface and m ...
- Java 基础功底
Java 基础语法特性: 首先了解并做好Java Web 开发环境配置(包含 JDK 的配置)是非常必要的.其中 CLASSPATH 的值开始必须包含 ".",否则用 javac ...
- 使用v-for循环写入html内容,每一项的数据的写入
项目使用vue.js,在写某个dialog页面时,需要循环后台的数据(班级,班级学生名单,已选学生名单,发布时间,截止时间,答案显示等). 遇到的问题:循环绑定的值是相同的,而且改动一个值,其他ite ...
- cmake用法及常用命令总结
CMakeLists.txt 的语法比较简单,由命令.注释和空格组成,其中命令是不区分大小写的.指令是大小写无关的,参数和变量是大小写相关的.但推荐全部使用大写指令.符号 # 后面的内容被认为是注释. ...
- 总结react native 事件机制
React 事件机制 一个组件的所有事件会使用统一的事件监听器,绑定到组件的最外层,那么如何使用? bind方法,绑定并且可以传递参数 <TouchableOpacity onPress={th ...
- 无视编码都统一转成unicode 然后截断 例如 。“发发发发发发” 操作之后显示为 “发发发发...”
-- local function checkPlayName( str ) -- str = Utils.utf8_to_unicode(str)-- local retStr = "&q ...
- Vs自定nuget push菜单
1.需要准备 nuget.exe 和 nuget-push.cmd 命名行 nuget.ext 下载地址:https://files.cnblogs.com/files/liuxiaoji/nuget ...