zoukankan      html  css  js  c++  java
  • TheZealous的集训日常之奇奇怪怪的dp题(1) 洛谷P5322 [BJOI2019]排兵布阵

    排兵布阵!

    【思路】

    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 }

     下午可太困了!

  • 相关阅读:
    9. MySQL
    python第四课
    python第三课pycharm的使用
    python第二课
    python第一课
    Python3基础-网络编程(8)
    Python3基础-异常处理(7)
    Python3基础-面向对象(6)
    Python3基础-模块和包(5)
    Python3基础-文件处理(4)
  • 原文地址:https://www.cnblogs.com/TheZealous/p/15094162.html
Copyright © 2011-2022 走看看