(Jizhong)2210インタビュー(インタビュー)[DP]

(ファイルIO):入力:interview.in出力:interview.out
制限時間:1000ミリ秒のスペースの制約:131072キロバイト特定の制限
後藤ProblemSet


タイトル説明
あなたは、あなたが今、面接に必要とされている記者です n個 n個 国の指導者。あなたの時間を消費するための各国のニーズの指導者とのインタビュー トン [ ] T [i]は、 が、あなたは値を得ることができます v [ i ] V [i]は、 の情報は、レポートを書くことができるように......
しかし恥ずかしい彼は、国の指導者たちは、あなたが彼の敵対状態の指導者と話をしたことがわかっているそうだとすれば、敵対関係に属する国の間に何らかの関係があることがあります彼はあなたのインタビューを拒否します。要するに、あなたの国のインタビューは、どの国が1ペアが敵対関係を構成することを選択することができ、あなたのインタビューを完了することができるようになり、またはいくつかの部分は、何にも来ます。
あなた B o s s ボス 、彼はあなたに時間制限を与えました T T あなたが制限時間内に面接のタスクを完了しなかった場合、あなたは解雇されます。もちろん、彼はあなたが時間を制限したいです T T 最大以内に完了インタビューの値の合計が加算さ。


入力
最初の行のは、3つの数字を有し、第一の数は制限時間であります T T 、2番目の数字は、多くの国であります n n個 、3番目の数字は敵対国間グループの数です m メートル
n n個 2つの数の行は、最初の数であります t [ i ] T [i]は、 、秒数であります v [ i ] V [i]は、
m メートル 行、各行が有します m [ i ] + 1 M [i]を+1 最初の入力の数 m [ i ] M [i]は 、この基は、入力された後、国の敵対関係の総数を表します。 m [ i ] M [i]は 表す数値、 m [ i ] M [i]は 国のグループ(のいずれか2つの間に米国の敵対関係は拮抗関係を有する、両国からなるそれぞれは、このグループがあるとして敵対的な関係であります 1 3 4 1,3,4、 次いで 1 1 3 1 3,1 4 3 4,3 、および 4 4 あれば、)敵対的な関係を構成します m [ i ] = 1 M [I] = 1 、そしてこの国およびその他の国は敵対関係を構成するものではありません。

出力
最大値を表すアン整数 V V


サンプル入力
10 2. 5
。5〜10
。7 9
。6 3
。1 13である
。8. 1
。3. 1. 3. 4
2 2 5

サンプル出力
22


データ範囲の制限
60 60 データの%。 m = 1 M = 1 ;
100 100 データの%。 0 T 50000 0 n 500 1 m 10 n = m [ i ] 0≤T≤50000,0≤n≤500,1≤m≤10、N =ΣM[I] 、すなわち、 m [ 1 ] + m [ 2 ] + . . . . . = n M [1] + M [2] +···= N 、一度だけ、それぞれの国の数は敵対関係。


問題解決のためのアイデア

DP:
ここに画像を挿入説明


コード

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<string>
#include<iomanip>
#include<cmath>
using namespace std;
int t,n,m,tt[510],v[510],mm[15][510],x,f[15][510];
int main(){
    freopen("interview.in","r",stdin);
    freopen("interview.out","w",stdout);
    scanf("%d%d%d",&t,&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&tt[i],&v[i]);
    for(int i=1;i<=m;i++)
    {
        scanf("%d",&mm[i][0]);
        for(int j=1;j<=mm[i][0];j++)
            scanf("%d",&mm[i][j]);
    }
    for(int i=1;i<=m;i++)
    {
        for(int j=0;j<=t;j++)
            f[i][j]=f[i-1][j];
        for(int j=1;j<=mm[i][0];j++)
        {
            for(int k=t;k>=tt[mm[i][j]];k--)
            f[i][k]=max(f[i][k],f[i-1][k-tt[mm[i][j]]]+v[mm[i][j]]);
        }
    }
    printf("%d",f[m][t]);
}
公開された119元の記事 ウォンの賞賛8 ビュー4919

おすすめ

転載: blog.csdn.net/kejin2019/article/details/104828234