abc227F - Treasure Hunting
依次钦定x为路径上的第k大的数,然后dp即可。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<bitset>
#include<cmath>
#include<set>
#include<unordered_map>
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (ll (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))
#define A puts("Yes")
#define B puts("No")
using namespace std;
typedef double db;
typedef long long ll;
//typedef __int128 i128;
const int N=2e5+10;
//const int inf=1ll<<60;
const ll inf=1ll<<60;
const ll mo=1e9+7;
ll f[80][35][35],a[50][50];
ll n,m,k,val,ans=inf;
void cmin(ll &x,ll y){
x=min(x,y);
}
void solve(){
fo(x,0,k) fo(i,0,n) fo(j,0,m) f[x][i][j]=inf;
if (a[1][1]<=val) f[0][1][1]=0;
if (a[1][1]>=val) f[1][1][1]=a[1][1];
fo(x,0,k) {
fo(i,1,n) fo(j,1,m) {
if (a[i][j]>=val) {
if (x>=1) {
cmin(f[x][i][j], f[x-1][i-1][j]+a[i][j]);
cmin(f[x][i][j], f[x-1][i][j-1]+a[i][j]);
}
}
if (a[i][j]<=val) {
cmin(f[x][i][j], f[x][i-1][j]);
cmin(f[x][i][j], f[x][i][j-1]);
}
}
}
ans=min(ans, f[k][n][m]);
}
int main()
{
// freopen("data.in","r",stdin);
scanf("%lld %lld %lld",&n,&m,&k);
fo(i,1,n) fo(j,1,m) scanf("%lld",&a[i][j]);
fo(x,1,n) fo(y,1,m) {
val=a[x][y];
solve();
}
printf("%lld",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?