#include<bits/stdc++.h>
using namespace std;
const int N=105;
const int WL=10010;
int n,W;
int v[N],w[N];
long long dp[N][WL];
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>W;
for(int i=1;i<=n;++i){
cin>>w[i]>>v[i];
w[i]+=w[i-1];
v[i]+=v[i-1];
}
for(int i=1;i<=n;++i){
for(int j=1;j<=i;++j){
for(int k=0;k<=W;++k){
if(k>=(w[i]-w[i-j])){
dp[i][k]=max({
dp[i][k],
dp[i-j][k],
dp[i-j][k-(w[i]-w[i-j])]+(v[i]-v[i-j])*j
});
}else{
dp[i][k]=max(dp[i][k],dp[i-j][k]);
}
}
}
}
long long mx=0;
for(int i=1;i<=n;++i){
for(int k=0;k<=W;++k){
mx=max(mx,dp[i][k]);
}
}
cout<<mx<<"\n";
}
定義子問題。
Dec 20, 2024給定一個帶權圖G,求一條路徑讓S到T的權重總和最小。
Aug 9, 2023#include<bits/stdc++.h> using namespace std; unsigned seed=chrono::steady_clock().now().time_since_epoch().count(); mt19937_64 rng(seed); struct Treap{ struct node{ int key,val,pos,pri,sz; int mx,mxPos;
Jun 17, 2023題目敘述 神獸日京元帶著得意門生黃瓜學長去科博館,在館外有一個裝置,內有多個球不斷的被送進一個"單一"開口的管子,而過了一段時間後,系統會將管子傾斜並將部分的球送出。而現在正在舉辦一個活動,主辦單位將球編號(1,2,3...,n),而參加者要控制系統並將球經過操作後排成特定的順序,完成者能免費進入科博館。黃瓜學長作為一個資訊高手aka厭惡零錢大鈔主義者,又不想被坑錢,他必須完成目標。 輸入說明 第一行為一整數$n(0<n<10^5)$ 第二行有$n$個正數$a_1,a_2,....a_n(1 \le a_i \le n)$ 輸出說明 求第二行之排序有沒有可能達成,有的話輸出"Yes",否則輸出"No"
Jun 17, 2023or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up