結果

問題 No.393 2本の竹
ユーザー rapurasurapurasu
提出日時 2016-07-12 15:59:09
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 58 ms / 1,000 ms
コード長 1,678 bytes
コンパイル時間 1,573 ms
コンパイル使用メモリ 174,460 KB
実行使用メモリ 27,136 KB
最終ジャッジ日時 2024-11-18 16:42:11
合計ジャッジ時間 3,177 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 26 ms
21,888 KB
testcase_01 AC 9 ms
7,424 KB
testcase_02 AC 26 ms
23,552 KB
testcase_03 AC 19 ms
14,720 KB
testcase_04 AC 12 ms
14,208 KB
testcase_05 AC 14 ms
12,180 KB
testcase_06 AC 10 ms
8,920 KB
testcase_07 AC 20 ms
13,592 KB
testcase_08 AC 33 ms
18,100 KB
testcase_09 AC 56 ms
25,992 KB
testcase_10 AC 16 ms
10,240 KB
testcase_11 AC 29 ms
13,440 KB
testcase_12 AC 33 ms
15,232 KB
testcase_13 AC 24 ms
12,800 KB
testcase_14 AC 19 ms
11,904 KB
testcase_15 AC 5 ms
8,960 KB
testcase_16 AC 8 ms
8,448 KB
testcase_17 AC 22 ms
17,920 KB
testcase_18 AC 12 ms
12,416 KB
testcase_19 AC 7 ms
7,808 KB
testcase_20 AC 11 ms
8,192 KB
testcase_21 AC 19 ms
19,456 KB
testcase_22 AC 31 ms
13,952 KB
testcase_23 AC 17 ms
12,800 KB
testcase_24 AC 13 ms
9,472 KB
testcase_25 AC 10 ms
7,808 KB
testcase_26 AC 9 ms
8,064 KB
testcase_27 AC 58 ms
27,136 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

 #include<bits/stdc++.h>
 using namespace std;
#define INF 1000000000
#define REP(i,n) for(int (i)=0;(i)<(int)(n);(i)++)
typedef long long LL;
LL n1[11];
LL n2[11];
LL m[11];
LL A[11][70];
LL ans;

int dp[62][100001];


 
int main(){
    int d;
    cin>>d;
    REP(i,d){
        cin>>n1[i]>>n2[i];
        cin>>m[i];
        REP(j,m[i]){
            cin>>A[i][j];
        }
    }
    REP(i,d){
        ans=0;
        vector<int> v;
        LL nn1=n1[i];
        LL nn2=n2[i];
        LL mm=m[i];
        REP(j,m[i]){
            v.push_back(A[i][j]);
        }
        sort(v.begin(),v.end());
        vector<int>s(60,0);
        REP(j,m[i]){
            if(j==0){
                s[0]=v[0];
            }else{
                s[j]=s[j-1]+v[j];
            }
        }
        int check=0;
        REP(j,m[i]){
            check++;
            if(s[j]>nn1+nn2){
                 break;
            }
        }
        REP(j,check+1){
            REP(k,100001){
                dp[j][k]=0;
            }
        }
        dp[0][0]=1;
        for(int j=1;j<check+1;j++){
            for(int k=0;k<100001;k++){
               if(dp[j-1][k]==1){
                  dp[j][k]=1;
               }
               if((dp[j-1][k]==1)&&(k+v[j-1]<100001)){
                   dp[j][k+v[j-1]]=1;
               }
            }
        }
        bool p=false;
        for(int j=check;j>=0;j--){
            for(int k=s[j-1]-nn1;k<=nn2;k++){
                  if(dp[j][k]==1){
                        cout<<j<<endl;
                        p=true;
                        break;
                  }
            }
            if(p==true){
                  break;
            }
        }
    }
}
0