fzu 2086レストラン注文(暴力検索)

2888 ワード

実は暴力の列挙がもっと適当だと感じています.Description Jackは最近学校のレストランで食事をするのが好きで、美味しくてきれいで安いです.
学校のレストランでは、a種類のスープ、b種類のご飯、c種類の麺、d種類の肉料理、e種類の菜食があります.
食事の組み合わせを保証するために、ジャックは毎食1~2種類の肉料理、1~2種類の精進料理(重複しない)を注文します.また、ジャックが気分がいいときは、同じご飯を注文し、スープを添えます.気分が悪いときは、うどんを1種類しか食べません.
経済的に限られているため、ジャックは毎回注文する総価格がmin~maxの間にある.ジャックは全部で何種類の注文案があるか知りたいと思っています.
Input入力データの第1行は、テストデータのグループ数を表す整数Tを含み、各テストデータについて、第1行の整数a,b,c,d,e(0Outputは、各テストデータのセットについて、注文案数を表す整数を含む1行を出力します.
Sample Input 1 2 2 2 2 2 2 3 3 1 5 2 1 4 3 6 5 8 Sample Output 3
この問題なら、暴力膜でしょう.膜が通っていればいいのに、膜が通ってからにしよう.2つに分けて、1つは気分の良い食事プラン(集合A)、1つは気分の悪い食事プラン(集合B)です.
では、最終案はAUBです.こんなに簡単です.データが弱いですね.私は暴力膜をしたのに、意外にも0 msをくれた.
コード:
#include 
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int a,b,c,d,e,mi,mx;
        cin>>a>>b>>c>>d>>e;
        int x1[a],x2[b],x3[c],x4[d],x5[e];
        int cnt=0;
        int tmp1,tmp2,tmp3,tmp4,tmp5;
        int ret1,ret2,ret3,ret4;
        for(int i=0; icin>>x1[i];
for(int i=0; icin>>x2[i];
for(int i=0; icin>>x3[i];
for(int i=0; icin>>x4[i];
for(int i=0; icin>>x5[i];
cin>>mi>>mx;
for(tmp4=0; tmp4for(int i=tmp4; iif(i==tmp4)
{
ret1=x4[tmp4];
}
else
{
ret1=x4[tmp4]+x4[i];
}
for(tmp5=0; tmp5for(int j=tmp5; jif(j==tmp5)
{
ret2=x5[tmp5];
}
else
{
ret2=x5[tmp5]+x5[j];
}
for(tmp2=0; tmp2for(tmp1=0; tmp1int ret=ret1+ret2+ret3;
if(ret>=mi&&ret<=mx)
cnt++;
}//ケース1
for(tmp3=0; tmp3int ret=ret1+ret2+ret4;
if(ret>=mi&&ret<=mx)
{
cnt++;
}
}//ケース2
}
}
}
}
cout<