P5322

状态表示

dp[i]i

转移

  • 将输入数组进行排序,使得 in[i][j] 表示对于第 i 座城堡,出动兵力第 j 小的玩家的士兵数

  • 这样做,如果主人公能在 i 城堡打败第 j 个人,将获得 i×j

dp[j]=max(dp[jin[i][k]21]+ik,dp[j])

  • 因为要严格大于对方的两倍,所以要 jin[i][k]21

  • 求最大值时要枚举每一个出兵数

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int INF=1e9;
const int N=110;
int s,n,m;
int in[110][110],dp[20010],maxi;
signed main(){
// freopen("1.in","r",stdin);
cin>>s>>n>>m;
for(int i=1;i<=s;i++){
for(int j=1;j<=n;j++)
cin>>in[j][i];
}
for(int i=1;i<=n;i++)
sort(in[i]+1,in[i]+1+s);
for(int i=1;i<=n;i++){
for(int j=m;j>=0;j--){
for(int k=1;k<=s;k++)
if(j>=in[i][k]*2+1) dp[j]=max(dp[j-in[i][k]*2-1]+i*k,dp[j]);
}
}
for(int i=0;i<=m;i++)
maxi=max(maxi,dp[i]);
cout<<maxi<<"\n";
}
posted on   Bubble_e  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话



点击右上角即可分享
微信分享提示