로곡 P2034 선택 숫자

8805 단어 dp낙곡
제목 설명은 한 줄에 n개의 비음정수 a[1]...a[n]를 정한다.현재 너는 그 중 몇 개의 수를 선택할 수 있지만, k개의 연속적인 숫자를 초과해서는 안 된다.너의 임무는 선택한 숫자와 가장 큰 숫자를 만드는 것이다.
입력 형식 첫 번째 행의 정수 n, k
다음 n행은 각 행의 정수로 a[i]를 나타냅니다.
출력 형식 출력 값은 답을 표시합니다.
작은 dp 하나. 저희가 f[i]를 설정해서 i의 최우수치를 뽑지 않으려고 60점 폭력을 썼는데 산소를 한 모금 들이마셨어요.
#include 
#include 
#include 
#define int long long 
using namespace std;
int n,k;
int a[100005];
int sum[100005];
int f[100005];
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
main(){
	n=read();k=read(); 
	for(int i=1;i<=n;i++) a[i]=read(),sum[i]=sum[i-1]+a[i];
	int q=0;
	for(int i=1;i<=n+1;i++)
    for(int j=max(q,i-k-1);j<i;j++)
    f[i]=max(f[i],f[j]+sum[i-1]-sum[j]);
    printf("%lld",f[n+1]);
	return 0;
} 

좋은 웹페이지 즐겨찾기