ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TheZealous的集训日常之奇奇怪怪的dp题(1) 洛谷P5322 [BJOI2019]排兵布阵

2021-08-03 14:36:12  阅读:196  来源: 互联网

标签:BJOI2019 排兵 派出 洛谷 int 对手 1005 dp


排兵布阵!

【思路】

1.审题:我方派出的兵一定要比敌方所出兵的二倍要多;要使用一个策略攻打多个对手。

2.分析:既然要使用一个策略攻打多个对手,那么对于每个城堡而言,每个对手派出的兵力不同,只要我打败了派出兵力多的,我就一定可以打败派出兵力少的。则可把该游戏转化为分组背包,每个城堡中的不同对手为组内元素,dp即可。

【代码实现】

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,m,s;
 4 int a[1005][1005];
 5 int dp[20005];
 6 
 7 int main()
 8 {
 9     scanf("%d %d %d",&s,&n,&m);
10     for(int i=1;i<=s;i++)
11     {
12         for(int j=1;j<=n;j++)
13         {
14             scanf("%d",&a[j][i]);
15         }
16     } 
17     for(int i=1;i<=n;++i)
18     {
19         sort(a[i]+1,a[i]+1+s);    
20         for(int j=1;j<=s;j++)
21         {
22             a[i][j]=a[i][j]*2+1;;
23         }
24     }
25     for(int i=1;i<=n;i++)
26     {
27         for(int j=m;j>0;j--)
28         {
29             for(int k=1;k<=s;k++)
30             {
31                 if(j-a[i][k]>=0&&dp[j-a[i][k]]+i*k>dp[j]) dp[j]= dp[j-a[i][k]]+i*k;
32             }
33         }
34     }
35     printf("%d",dp[m]);
36     return 0;
37 }

 

 下午可太困了!

 

标签:BJOI2019,排兵,派出,洛谷,int,对手,1005,dp
来源: https://www.cnblogs.com/TheZealous/p/15094162.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有