poj 객 잔 선택
/**
4G:
: 1000ms : 65535kB
n , 1 n 。 ( k , 0 ~ k-1 ) , ,
。
, , , 。 , ,
( ) , p。
, p 。
n,k,p, , , ;
n , i+1 , , i i 。
, , 。
5 2 3
0 5
1 3
0 2
1 4
1 5
3
2 , : ①③,②④,②⑤,④⑤,
4、5 ,4、5 4, 3 , 。 3 。
【 】
30% , n ≤ 100;
50% , n ≤ 1,000;
100% , 2 ≤ n≤ 200,000,0 < k ≤ 50,0 ≤ p ≤ 100, 0 ≤ ≤ 100。
*/
#include <cstdio>
#include <cstdlib>
using namespace std;
int n = 0, k = 0, p = 0;
int color[200005] = {0}, cost[200005] = {0};
int dp[200005][51] = {0};
int c(int m)
{
return m * (m - 1) / 2;
}
int main()
{
int sumn[51] = {0};
int sum_temp[51] = {0};
int sum_illegal = 0;//
int sum_total = 0;//
scanf("%d%d%d", &n, &k, &p);
//int mark = 0;
for(int i = 0; i < n; ++i)
{
scanf("%d%d", &color[i], &cost[i]);
sumn[color[i]]++;
if(cost[i] <= p)
{
for(int j = 0; j < k; ++j)
{
sum_illegal += c(sum_temp[j]);
sum_temp[j] = 0;
}
}
else
{
sum_temp[color[i]]++;
}
}
for(int j = 0; j < k; ++j)
sum_illegal += c(sum_temp[j]);
for(int j = 0; j < k; ++j)
{
sum_total += c(sumn[j]);
}
printf("%d
", sum_total - sum_illegal);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
POJ3071: Football(확률 DP)Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, …, 2n. After n rounds, only one team...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.