[RQNOJ] P57ああ、検索やGFを見つけるために検索しました

RQNOJ 57ああを検索し、GFを見つけるために検索しました

タイトル説明

ポータル

「ああ、あなたは私の良いGFあり、食事ああを引っ張って検索し、良いGFを見つけ、GFを見つけるために検索、手。さようなら。」
「ああ、ああんではないさよなら...」
七夕...七夕...七夕本彼は最初の曲に耳を傾けながら日は、どのように痛みを伴う新人のために、この単一sqybi ...「ああは、検索やGFを見つけるために検索」、彼はまだ非常に苦痛であると呼ばれている。痛みを避けるために、sqybiに決めました彼女自身に何かを与える。彼はMM ZMC七夕シミュレートレースの担当者を見つけるために行ってきました、彼女は任務に自分自身に質問を与えてみましょう。ストーカーの数日後、ZMC MMは最終的に私は同意した。
しかし、これを取得します自分自身を与える-タスクsqybiが-_-...話題はさらに、単一よりも退屈することを発見したので、彼は上記に従うことを決めたと同時に、自分自身愚かな物事の別の部分のトピックを作ることができますGFを探しています。

sqybi今空想のn-MM、我々としてもnにそれらの数1を入れてあります。MMが食べるためにお金を使うことで、我々はMMの数iがMM。[i]は、海洋ブロック人民元を過ごすために食べるとGFとして自分自身にうそしたいしてくださいと仮定文字の電荷に、我々はsqybi、キャラクター[i]は、RPを過ごすために(バブルものかもしれないMMとして知られている)彼女自身GFの動作を取得しようとすると、MM、私、あなたの番が食べることを想定しています。とMMのそれぞれについて、私たちは、時間と呼ばれ、[I]。彼らはの時間[I]で^ _ ^ MMを取得するには、i番目の時間を十分に魅力を持っていることを確認sqybi i番目のMMのために彼女の時間を取得し、対応するしている。
sqybi希望を得るために、限りMM彼のGFが、これは疑いを超えている。しかし、彼はMMの最大数のことを確実にするために取得したいので、彼は、(すべての七夕の季節のタイトルの後にないアウト)これを行うには・多くの時間を費やす必要はありません。最小限で過ごした合計時間。

sqybi今、海をブロックM、彼はまた、(これはああ~~ RP保存シミュレーションゲームにも問題である)、Rの文字までの期間の努力によって保存された。彼の性格及びこれらの海のおかげで、いくつかのMMを浸すことができます。彼知りたい、彼はどのくらいのMMを過ごすための最小時間を浴びた。
注sqybi時に、MM-- MMの2以上の場合、彼らは戦う間だけバブルに浸して...

入力形式

入力の最初の行は、N MM sqybi空想の数である。
そこであるN番の行は、順次、2、3 1を表し、...、MMのメッセージNは、それぞれの行はMMの情報を表します、三つの整数がある:RMB、RPおよび時間。
二つの整数、それぞれ、M及びRの最後の行。

データの20%を、1 <= N <= 10 ;
データの100%に、1 <= RMB <= 100,1 <= RP <= 100,1 <=時間<= 1000;
データの100%に、1 <= M <= 100,1 <= R < = 100,1 <= N <= 100

出力フォーマット

あなただけでMMの数を確保する上でsqybi過ごし少なくとも合計時間を表す整数を持つ出力の1行を、必要とします。

サンプル

入力

4
1 2 5
2 1 6
2 2 2
2 2 3
5 5

出力

13

主なアイデア

[I] [j]は、文字ミリメートルの最大数にi番目RMB消費、バブルポイントjを表すとMM
DP [i] [j]は、i番目のRMB消費に要する最小時間での点j文字バブルミリメートルまでです。
k番目のバブルMM、次に列挙人民元の文字のi、jの電流を列挙するには、より多くの3例転送よりも何もありません:
の数は、使用済み<=短い時間(現在ミリメートルを浸していない)フォームに現在のコストミリメートル1.バブル数mmに、この時点では、現在の選挙ミリメートルは、ミリメートルの数は、より多くの電流を与えるため、その数mmかかります現在ミリメートルの数(現在ミリメートルを選択)は、消費電流が時間=を要していない気泡は= 1ミリメートルいますそれは+ mmは必要な消費電流の時間を浸してあまり時間がかかり、
わずか数mmの泡2.現在のコストは=ミリメートル+ 1のは、バブルにあまり時間を費やして(泡は現在ミリメートルではありません)(現在のミリメートルを選択)、この時点で更新にミリメートルの値が、ちょうど十分な時間を更新する必要はありません、DPましょう[I] [J] =何分(DP [I] [J]、DP [I-は、いくつかのお金を使う] [J-使用済みの文字])が可能;
3.にバブルにバブル現在の数がMMをとる>以下、この場合の費用(現在のMMを浸していない)+1のミリメートル数(現在選択mm)が、同じバブルを指すときに、よりミリメートルを取ることができるので、更新しかし、その答えは、(無視する)更新されていない、最適な解決策ではありません。

次のように転送プロセスは、次のとおりです。


答えを求める際に、さらに、気泡ミリメートルを表すMAXNアプリケーションの最大数は、最小のコストがミネソタで表されます。バブルミリメートル> MAXNやバブルミリメートル= MAXNが、現在の時刻に現在のコストへの現在のコストは答えを更新するために、以下ミネソタ州以上の場合。(特定のコードを参照してください)

コードは以下の通りです

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <map>
#include <stack>
#include <cstring>
using namespace std;
#define ll long long

int n,m,r;
int rmb[105],rp[105],tim[105];
int dp[105][105],mm[105][105];
int maxn=-999,minn=999;

int min(int x,int y)//重载min函数,防止输出0
{
    if(!x)
        return y;
    if(!y)
        return x;
    if(x<y)
        return x;
    return y;
}

int main(int argc, char const *argv[])
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>rmb[i]>>rp[i]>>tim[i];
    cin>>m>>r;//rmb & rp
    for(int k=1;k<=n;k++)
        for(int i=m;i>=rmb[k];i--)
            for(int j=r;j>=rp[k];j--)
            {
                if(mm[i][j]<=mm[i-rmb[k]][j-rp[k]])
                {
                    mm[i][j]=mm[i-rmb[k]][j-rp[k]]+1;
                    dp[i][j]=dp[i-rmb[k]][j-rp[k]]+tim[k];
                }
                if(mm[i][j]==mm[i-rmb[k]][j-rp[k]]+1)
                    dp[i][j]=min(dp[i][j],dp[i-rmb[k]][j-rp[k]]+tim[k]);
            }
    for(int i=0;i<=m;i++)
        for(int j=0;j<=r;j++)
            if(mm[i][j]>maxn || (mm[i][j]==maxn && dp[i][j]<minn))
                maxn=mm[i][j],minn=dp[i][j];
    cout<<minn<<endl;
    return 0;
}

おすすめ

転載: www.cnblogs.com/wjsoj/p/12006411.html