多校第七场 DP+map模拟

HDU 4939 Stupid Tower Defense

DP 推一下。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<queue>
#include<stack>
#include<vector>
#include<ctype.h>
#include<algorithm>
#include<string>
typedef long long LL;
using namespace std;
LL dp[1505][1505];
int main()
{
    int T;
    scanf("%d",&T);
    for(int ii=1; ii<=T; ii++)
    {
        LL  n, x, y, z, t;
        scanf("%I64d%I64d%I64d%I64d%I64d",&n,&x,&y,&z,&t);
        printf("Case #%d: ",ii);
        LL ans=0;
        memset(dp,0,sizeof(dp));
        if(x*n*t>ans) ans=x*n*t;
        for(LL i=1; i<=n; i++)
        {
            dp[i][0]=0LL;
            if(dp[i][0]+(t+i*z)*(n-i)*x>ans)
                ans=dp[i][0]+(t+i*z)*(n-i)*x;
            for(LL j=1; j<i; j++) //j绿塔
            {
                dp[i][j]=max(dp[i-1][j-1]+(t+(i-j)*z)*(j-1LL)*y,dp[i-1][j]+(t+(i-1LL-j)*z)*j*y);
                if(dp[i][j]+(t+(i-j)*z)*(n-i)*(j*y+x)>ans)
                    ans=dp[i][j]+(t+(i-j)*z)*(n-i)*(j*y+x);
            }
            dp[i][i]=dp[i-1][i-1]+t*(i-1LL)*y;
            if(dp[i][i]+t*(n-i)*(i*y+x)>ans)
                ans=dp[i][i]+t*(n-i)*(i*y+x);
        }
        printf("%I64d\n",ans);
    }
    return 0;
}

HDU 4941 Magical Forest

比赛的时候没想到好方法,然后宝哥想到了A的。

现在重新回来做了一下。

比赛的时候可能脑子堵了吧。转换一下,变换一下很容易就搞定了的事就是想不出来。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<bitset>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define llson j<<1,l,mid
#define rrson j<<1|1,mid+1,r
#define INF 0x7fffffff
#define maxn 100010
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
map<int,int>h,s,f,mm[maxn];
int main()
{
    //freopen("1.txt","r",stdin);
    int t,ii=1;
    cin>>t;
    while(t--)
    {
        int a,b,c,i,n,m,k,q;
        scanf("%d%d%d",&n,&m,&k);
        h.clear(),s.clear(),f.clear();
        for(i=0;i<=k;i++) mm[i].clear();
        for(i=0;i<k;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            b++,a++;
            h[a]=a,s[b]=b;
            if(!f[a]) f[a]=i;
            mm[f[a]][s[b]]=c;
        }
        scanf("%d",&q);
        printf("Case #%d:\n",ii++);
        while(q--)
        {
            scanf("%d%d%d",&c,&a,&b);a++;b++;
            if(c==1&&h[a]&&h[b]) swap(h[a],h[b]);
            else if(c==2&&s[a]&&s[b]) swap(s[a],s[b]);
            else
            {
                if(h[a]&&s[b])
                    printf("%d\n",mm[f[h[a]]][s[b]]);
                else puts("0");
            }
        }
    }
    return 0;
}

多校第七场 DP+map模拟

时间: 2024-08-03 00:36:35

多校第七场 DP+map模拟的相关文章

2014多校第七场1005 || HDU 4939 Stupid Tower Defense (DP)

题目链接 题意 :长度n单位,从头走到尾,经过每个单位长度需要花费t秒,有三种塔: 红塔 :经过该塔所在单位时,每秒会受到x点伤害. 绿塔 : 经过该塔所在单位之后的每个单位长度时每秒都会经受y点伤害. 蓝塔 : 经过该塔所在单位之后,再走每个单位长度的时候时间会变成t+z. 思路 : 官方题解 : 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #define LL long long

2014多校第七场1003 || HDU 4937 Lucky Number

题目链接 题意 : 给定一个十进制n,让你转化成某个进制的数,让这个数只包含3 4 5 6这些数字,这个进制就成为n的幸运数字,输出有多少幸运数字,例如19,5进制表示是34,所以5是19的一个幸运数. 思路 : 以下思路有这里提供 先考虑特殊情况,所情况下会有无穷个?只有n=3,4,5,6的时候,因为这几个数在大于n的进制下都是他本身..注意特殊情况不包括33,343这些(我一开始就死在这里了,wa了三次).因为33在34进制下就不是33了(类似于10在16进制下就是A了). 我们知道n=a0

HDU 5378 Leader in Tree Land(2015 多校第7场 dp)

Leader in Tree Land Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 150    Accepted Submission(s): 54 Problem Description Tree land has  cities, connected by  roads. You can go to any city from

杭电多校第七场 Traffic Network in Numazu

Problem Description Chika is elected mayor of Numazu. She needs to manage the traffic in this city. To manage the traffic is too hard for her. So she needs your help. You are given the map of the city -- an undirected connected weighted graph with N

2019 杭电多校 第七场

2019 Multi-University Training Contest 7 补题链接:2019 Multi-University Training Contest 7 1001 A + B = C 题意: 给出 \(a, b, c\),求 \(x, y, z\) 满足 \(a\cdot 10^x + b\cdot 10^y = c\cdot 10^z\).\(a, b, c \le 10^{100000}\). 题解: 补零到 \(a, b, c\) 长度相等之后,可能的情况只有四种: \

hdu 6127 : Hard challenge (2017 多校第七场 1008)(计算几何)

题目链接 题意:二维平面上有n个点(没有重叠,都不在原点,任意两点连线不过原点),每个点有一个权值,用一条过原点的直线把他们划分成两部分,使两部分的权值和的乘积最大.输出最大的乘积. 极角排序后,将原来(-pi,pi]区间的元素copy到(pi,3pi],用双指针维护一个角度差不超过pi的区间,记区间的权值和为sum1,用sum1*(sum-sum)更新ans #include<bits/stdc++.h> using namespace std; typedef long long LL;

多校第七场小知识~

还是不会做题,没关系,那就先了解一些相关知识就好~ 1010 . 矩阵快速幂+分块 矩阵快速幂,因为|fn-1  fn-2|*矩阵A=|c*fn-2+d*fn-1|; 分块,因为p/n随着n而变化,所以需要按照变化点来分成不同块,这样复杂度才可以降到根号p: 分块:设  x=p/i,若x=p/i,i=p/x=p/(p/i),即此时i为使得p/i值不变最大的那个i...所以按照i=p/(p/i)+1进行分块即可: 快速幂:以求a的b次方来介绍,=        11的二进制为1101:最终复杂度为

2019杭电多校第七场 HDU - 6656 Kejin Player——概率&amp;&amp;期望

题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $l$ 层到 $j$ 层的期望代价. 分析 这种期望具有可加性,因此,维护一个前缀和 $sum[i]$:从 $1$ 到 $i$ 的期望. 设从 $i$ 到 $i+1$ 的期望代价为 $E$,则有 $E = a_i + (1-\frac{r_i}{s_i})(sum[i]-sum[x_i]+E)$ 解得

HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第一种是行交换操作,就是把矩阵的两行进行交换,另一种是列交换操作,注意两种操作都要求行或列至少要有一个水果,第三种操作是查找,询问第A行B列的水果的能量值,如果查询的位置没有水果,则输出0. 因为n和m都很大,达到了2*10^9,但水果最多一共只有10^5个,我的做法是直接用结构体存了之后排序,然后m