ジョブweek4

質問の意味:
ZJMがあるのn ZJMはDDLの前に仕事をしていない場合は、ジョブ、各ジョブには、独自のDDLを持って、その後、教師はすべての通常ポイントをこの仕事が差し引かれます。
だから、ZJMはできるだけビット以下の点をバックルして宿題の順序を調整する方法を知りたいです。
彼を助けてください!
入力:
Tテストの入力。最初の入力ラインは、テストケースの数で発見された、単一の整数Tです。
各テストケースは、正の整数Nを開始する(1 <= Nは<= 1000)、 ジョブの数を示します。
次に、2本のライン。最初の行は、DDL、バックル点を表すN個の整数を含む次の行を表すN個の整数を含みます。
出力:
各テストケースについて、あなたは最小合計スコアの出力、各試験ラインを減らす必要があります。
サンプル入力:
3
3
3 3 3。
10. 5. 1
3。
1. 3. 1。
6 2 3。
7。
1 4 6 4 2 4 3
3 2 1 7 6 5 4。
サンプル出力:
0
。3
。5つの
アイデア:
構造体の定義は、定義され、DDLおよびスコア。入力種類の試験サンプルは、DDLがサンプルから始まるの最大数を決定し、ノードがマークされていない場合、この時点でサンプルは、このジョブを完了するDDLこの時点で記述することができ、この点がマークされます。無印加えた合計スコアポイントのすべてのDDLおよび標識され、最終結果のポイントを通過することによって。最終結果の出力の合計。
コード:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
 int ddl;
 int score;
 bool operator<(const node &te) const
 {
  if(score!=te.score)
     return score>te.score;
  return ddl>te.ddl;
 }
};
int main()
{
 int t;
 cin>>t;
 int n;
 while(t--)
 {
  cin>>n;
  int sum=0;
  int vis[1005]={0};
  node a[1005];
  for(int i=0;i<n;i++)
  {
   cin>>a[i].ddl;
  }
  for(int i=0;i<n;i++)
  {
   cin>>a[i].score;
  }
  sort(a,a+n);
  for(int i=0;i<n;i++)
  {
   int flag=0;
    for(int j=a[i].ddl;j>0;j--)
    {
     if(vis[j]==0)
     {
         vis[j]=1;
      flag=1;
      break;
     }
    }
    if(flag==0)
    sum=sum+a[i].score;
   }
  cout<<sum<<endl;
 }
 return 0;
}
公開された19元の記事 ウォンの賞賛0 ビュー211

おすすめ

転載: blog.csdn.net/weixin_45117273/article/details/104983036