1. 程式人生 > >度度熊與邪惡大魔王_DP

度度熊與邪惡大魔王_DP

題目大意:
n個魔王各自具有生命值(a),防禦力(b),有m種攻擊,分別需要k的晶石,能產生p的攻擊,求最少需要多少晶石。
思路:
防禦力範圍小迴圈防禦力
#include <iostream>
#include <cstdio>
#include <string.h>
#define INF 0x3f3f3f3f
#define MAXN 100000 + 10
#define MAXM 1000 + 10
#define MAXA 1000 + 10
using namespace std;
typedef long long int LL;
int a[MAXN], b[MAXN];
int k[MAXM], p[MAXM];
LL dp[MAXA][20];      //在此防禦力(第二維)下 產生至少為此攻擊(第一維) 最少需要的晶石

int main()
{
    //freopen("in.txt", "r", stdin);
    int n, m;
    int maxA, maxB, maxP;
    while (scanf("%d %d", &n, &m) != EOF)
    {

        maxA = maxB = maxP = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%d %d", a + i, b + i);
            maxA = max(maxA, a[i]);
            maxB = max(maxB, b[i]);
        }

        for (int i = 0; i < m; i++)
        {
            scanf("%d %d", k + i, p + i);
            maxP = max(maxP, p[i]);
        }

        if (maxP <= maxB)
        {
            printf("-1\n");
            continue;
        }
        memset(dp, 0x3f, sizeof(dp));
        memset(dp[0], 0, sizeof(dp[0]));

        for (int i = 0; i <= maxB; i++)     //迴圈防禦力
        {
            for (int x = 0; x <= maxA; x++)  //產生的攻擊
            {
                for (int j = 0; j < m; j++)   //考慮j之前的技能
                {
                    int temp = p[j] - i;
                    if (x > temp)
                        dp[x][i] = min(dp[x][i], dp[x - temp][i] + k[j]);
                    else
                        dp[x][i] = min(dp[x][i], (LL)k[j]);
                }

            }

        }
        LL re = 0;
        for (int i = 0; i < n; i++)
            re += dp[a[i]][b[i]];
        printf("%lld\n", re);


    }

}

相關推薦

度度邪惡魔王_DP

題目大意: n個魔王各自具有生命值(a),防禦力(b),有m種攻擊,分別需要k的晶石,能產生p的攻擊,求最少需要多少晶石。 思路: 防禦力範圍小迴圈防禦力#include <iostream&g

2017百度之星資格賽 1003:度度邪惡魔王(DP)

solution nav normal ner 就會 預處理 display badge rate 度度熊與邪惡大魔王 Accepts: 3021 Submissions: 18787 Time Limit: 2000/1000 MS (Java/Ot

2017百度之星資格賽 1003 度度邪惡魔王 背包DP

log accep 防禦 ssi str 完全背包 time 怪物 amp 度度熊與邪惡大魔王 Accepts: 3027 Submissions: 18837 Time Limit: 2000/1000 MS (Java/Others) Memor

hdu 6082 度度邪惡魔王(2017"百度之星"程序設計大賽 - 資格賽 )

lib div problem ron -a def size 進行 無限 度度熊與邪惡大魔王 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total

HDU - 6082 度度邪惡魔王(背包變式)

擁有 防禦 ret mat 使用 std clas 多少 esp 度度熊與邪惡大魔王 度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需

1003度度邪惡魔王(完全揹包)

1003度度熊與邪惡大魔王 Accepts: 1503 Submissions: 9026 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Descrip

度度邪惡魔王

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p

百度之星2017資格賽1003 度度邪惡魔王

Problem Description 度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。

hdu6082 2017"百度之星"資格賽1003 度度邪惡魔王(完全揹包dp)

度度熊與邪惡大魔王Accepts: 3135 Submissions: 19439 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob

HDU 6082 度度邪惡魔王(完全揹包)

分析:n很大,但是怪物的防禦力只到10.列舉一下防禦力,然後對技能完全揹包 dp[i][j]:防禦力為j,生命力為i的最少晶石數 這個題主要是細節要注意感覺 #include <iostre

HDU 6082 度度邪惡魔王

度度熊與邪惡大魔王 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 543 Accep

HDU 6082 度度邪惡魔王 (完全揹包)

度度熊與邪惡大魔王                                                                 Time Limit: 2000/1000 MS

度度邪惡魔王(2017"百度之星"程式設計大賽

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p

2017百度之星資格賽 1003 度度邪惡魔王(完全揹包)

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p

2017百度之星-1003-度度邪惡魔王(完全揹包)

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p

(百度之星資格賽) 度度邪惡魔王 (dp)

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打

百度之星2017 資格賽 1003 度度邪惡魔王

完全揹包 這題要考慮到怪獸的數目100000很多,但是生命值1000和防禦力10很小,並且招數種類1000也不大,(根據抽屜原理)說明有很多生命值或者防禦力重複的怪獸。因此我們沒有必要一個怪獸一個是怪獸大,只要對每種生命值和防禦力的怪獸進行每種招數的轉移即可。 dp[i][

HDU 6082 度度邪惡魔王(動態規劃)

#include<iostream> #include<stdio.h> #define ll __int64 #define INF 1e9+1 using namespace std; int n,m; ll a[100010]; ll b[100010]; ll p[1005]

度度邪惡魔王 (百度之星之資格賽)

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。  邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。  度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。  當然,如果度度熊使用第i個技能打在第j個怪

度度邪惡魔王(dp)

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命