結果
| 問題 | No.1238 選抜クラス |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-09-26 18:50:14 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,853 bytes |
| コンパイル時間 | 908 ms |
| コンパイル使用メモリ | 91,432 KB |
| 実行使用メモリ | 808,704 KB |
| 最終ジャッジ日時 | 2024-06-29 13:26:58 |
| 合計ジャッジ時間 | 9,151 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 WA * 12 MLE * 2 |
ソースコード
#include<vector>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
#include<queue>
#include <sstream>
#include <set>
#include<stack>
#include <utility>
#include <tuple>
#define INF 1000000000000
const long long MOD = 1000000007;
using namespace std;
typedef long long llong;
#define debug cout << "Hello" << endl;
//int isalpha(char ch): ch がアルファベットなら true を返す
//int isdigit(char ch): ch が数字なら true を返す
//int islower(char ch): ch が小文字なら true を返す
//int isupper(char ch): ch が大文字なら true を返す
//int tolower(char ch): ch の小文字を返す
//int toupper(char ch): ch の大文字を返す
//string型
//size() 文字数を返す
//Insert() (指定した場所に)文字・文字列を挿入する
//erase() (指定した場所の)文字・文字列を削除する
//clear() すべての文字を削除する
//substr() 文字列の(指定した)部分文字列を返す
//replace() (指定した)部分文字列を新しい文字列に置換する
//c_str()変換
//文字列の比較は、<=や==などを使え
//replace関数を使い、簡単に文字列を置換
//リバース関数:reverse(str.begin(), str.end());
//map<type, type> dict;で宣言
//グラフ理論用変数
//vector<vector<llong> > graph(N);
//ソート
//降順sort(v.begin(), v.end(), std::greater<Type>());
//大文字から小文字へんかん
//w[i] = w[i]-'A'+'a';
//vector
//assignメソッド 引数:サイズ、値
//与えられたサイズと値でvectorを初期化する
//queueクラス
//find()次に取り出す値の表示をする。
//pop()値を取り出す。戻り値はなし
//push()キューに値をプッシュする
//priority_queueクラス
//切り上げ
//ceil
//floor
int main(){
llong N,K;
cin >> N >> K;
vector<llong> A(N+1, 0);
llong total=0;
for(int i=1; i<=N; i++){
cin >> A[i];
total = total + A[i];
}
vector<vector<vector<llong> > > dp(N+1, vector<vector<llong> >(N+1, vector<llong>(total+1, 0)));
dp[0][0][0] = 1;
for(int i=1; i<=N; i++){
for(int j=0; j<=N; j++){
for(int k=0; k<=total; k++){
if(j-1<0){
dp[i][j][k] = dp[i-1][j][k];
continue;
}
if(k-A[i]<0){
dp[i][j][k] = dp[i-1][j][k];
continue;
}
dp[i][j][k] = dp[i-1][j][k]+dp[i-1][j-1][k-A[i]];
}
}
}
llong ans=0;
for(int i=1; i<=N; i++){
for(int j=0; j<=total; j++){
if(K<=((double)j/(double)i)){
ans = ans + dp[N][i][j];
}
}
}
cout << ans << endl;
return 0;
}