씨
문제의 의미
주어진
, 주어진
.
수요가 여부
, 대회
문제 해결
다음, 그렇지 않은 경우.
스물 두 범위는
다음 만이있을 것이다 것을 발견
즉,
이며
계승 성장 때문에
이를들 수있다.
#include<bits/stdc++.h>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define sf(x) scanf("%d",&x)
using namespace std;
typedef long long ll;
const int maxn = 250050;
vector<int>G[maxn];
int A[maxn],c[maxn][10],col[maxn],Color[maxn];
int dep[maxn];
ll ans=0x3f3f3f3f3f3f3f3f,ret;
int main(){
ll n,k;cin>>n>>k;
for(int i=1;i<=k;i++){
if((n%i)!=(i-1)){
puts("No");
return 0;
}
}
puts("Yes");
}
이자형
문제의 의미
각각의 나무가있다 조류는 새 통화에 필요 마나, 호출은 자신을 증가 최대 마나, 나무가 추가됩니다 마무리 얼마나 많은 새 통화까지 추구 마나,
문제 해결
명확한
키는 현재 상태의 마나를 얻고, 현재 마나를 알 방법이다.
당신은 최대 마나를 알고 싶다면, 당신은 얼마나 많은 전투 조류를 알고 있어야합니다.
새들의 수를 기록하기 때문에 상태는, 조류의 수를 기록 할 수 있도록
값은 중요하지 않습니다 기록 마나로 사용할 수 있습니다. 새 같은 수의 더 나은 소환 마나 분명히위한
전송을 용이하게하기 위해,이 상태로 얻을 수없는 대표, 우리는 하루의 끝 이후 증가
날 수입니다.
동등하게 공유 할 수
복잡성.
모든 조류의 현재 수를 열거, 수의 열거 새들이 나무에 호출합니다.
직접 호출하지 마십시오
,과 마나를 취할
호출을 한 다음, 선정로부터 감산 플러스
, 테이크
그들은 이상 최대 마나 생각할 수있는 경우에 질문입니다.
그러나 아직도 내가 열심히 일하겠습니다, 동료 팁에 의존하고 있습니다.
정말 훈련 동안 좋은 습관이 아닙니다 옛 동료를 찾습니다.
#include<bits/stdc++.h>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define sf(x) scanf("%d",&x)
using namespace std;
typedef long long ll;
const int maxn = 250050;
string str[maxn];
struct node{
int s,h;ll tmp;
int id;
friend bool operator < (node a,node b){
return 1ll*a.s*b.h>1ll*b.s*a.h;
}
}A[maxn];
int c[maxn],cost[maxn],pre[maxn];
ll dp[1050][10050];
int main(){
int n,W,B,X;
cin>>n>>W>>B>>X;
FOR(i,1,n)sf(c[i]),pre[i]=pre[i-1]+c[i];
FOR(i,1,n)sf(cost[i]);
memset(dp,-1,sizeof(dp));
dp[0][0]=W;
for(int i=1;i<=n;i++){
for(int j=0;j<=pre[i-1];j++){
if(dp[i-1][j]==-1)continue;
dp[i][j]=max(min(dp[i-1][j]+X,W+1ll*B*j),dp[i][j]);
}
for(int j=0;j<=pre[i];j++){
for(int k=0;k<=c[i]&&k<=j;k++){
if(dp[i-1][j-k]<1ll*k*cost[i])continue;
ll tmp=dp[i-1][j-k]-1ll*k*cost[i];
dp[i][j]=max(min(tmp+X,W+1ll*B*j),dp[i][j]);
}
}
}
int ans=0;
for(int i=0;i<=pre[n];i++){
if(dp[n][i]==-1)continue;
ans=max(ans,i);
}
cout<<ans<<endl;
}