模拟——1031D
Posted zsben991126
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟——1031D相关的知识,希望对你有一定的参考价值。
/* dp[i][j]表示到[i,j]的权值 cnt[i,j]表示到[i,j]还可以使用的修改的次数 cnt[i,j]=max(cnt[i-1,j],cnt[i,j-1]) 如果mp[i,j]!=‘a‘,cnt[i,j]--,没得减就赋值dp[i,j],最后找到最小的dp[i,j]输出 */ #include<bits/stdc++.h> using namespace std; #define maxn 2005 #define INF 0x3f3f3f3f int n,k,dp[maxn][maxn],cnt[maxn][maxn]; char mp[maxn][maxn]; int main(){ cin>>n>>k; for(int i=1;i<=n;i++) scanf("%s",mp[i]+1); for(int i=0;i<=n;i++) dp[0][i]=dp[i][0]=INF; cnt[1][0]=cnt[0][1]=k;dp[0][1]=dp[1][0]=0; for(int k=1;k<=2*n-1;k++){ int Min=INF; for(int i=1;i<=n;i++){ int j=k-i+1; if(j<=0 || j>n)continue; cnt[i][j]=max(cnt[i-1][j],cnt[i][j-1]); if(cnt[i][j]){//还可以修改 if(mp[i][j]!=‘a‘)cnt[i][j]--; dp[i][j]=0; } else { dp[i][j]=min(dp[i-1][j],dp[i][j-1]); if(dp[i][j]!=INF)dp[i][j]=mp[i][j]-‘a‘; } Min=min(Min,dp[i][j]); } cout<<(char)(Min+‘a‘); for(int i=1;i<=n;i++){ int j=k-i+1; if(j<=0 || j>n)continue; if(dp[i][j]!=Min)dp[i][j]=INF; } } puts(""); /*for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) cout<<dp[i][j]<<" "; puts(""); }*/ return 0; }
以上是关于模拟——1031D的主要内容,如果未能解决你的问题,请参考以下文章
当我想模拟数据并测试 UI 片段时,doNothing() 不起作用