社区讨论
为何第二维循环容量(j)时正序倒序均可AC?
P2014[CTSC1997] 选课参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi86agx5
- 此快照首次捕获于
- 2025/11/21 09:19 4 个月前
- 此快照最后确认于
- 2025/11/21 09:19 4 个月前
CPP
#include<cstdio>
#include<iostream>
#include<stdlib.h>
#include<vector>
#define MAXN 310
using namespace std;
vector<int> root[MAXN];
int id[MAXN],di[MAXN],rt[MAXN],dp[MAXN][MAXN];
void dfs(int u){
static int cnt;
id[u]=cnt;
di[cnt]=u;
cnt++;
for(int i=0;i<root[u].size();i++){
int v=root[u][i];
dfs(v);
}
rt[id[u]]=cnt;
}
int v[MAXN];
int main(){
int m,n;
cin>>n>>m;
int k1,k2;
for(int i=1;i<=n;i++){
cin>>k1>>k2;
v[i]=k2;
root[k1].push_back(i);
}
dfs(0);
for(int i=n;i>=0;i--){
** _for(int j=m+1;j>=0;j--)_ **{
if(j>=1)
dp[i][j]=max(dp[rt[i]][j],dp[i+1][j-1]+v[di[i]]);
}
}
cout<<dp[0][m+1];
return 0;
}
CPP#include<cstdio>
#include<iostream>
#include<stdlib.h>
#include<vector>
#define MAXN 310
using namespace std;
vector<int> root[MAXN];
int id[MAXN],di[MAXN],rt[MAXN],dp[MAXN][MAXN];
void dfs(int u){
static int cnt;
id[u]=cnt;
di[cnt]=u;
cnt++;
for(int i=0;i<root[u].size();i++){
int v=root[u][i];
dfs(v);
}
rt[id[u]]=cnt;
}
int v[MAXN];
int main(){
int m,n;
cin>>n>>m;
int k1,k2;
for(int i=1;i<=n;i++){
cin>>k1>>k2;
v[i]=k2;
root[k1].push_back(i);
}
dfs(0);
for(int i=n;i>=0;i--){
** _for(int j=0;j<=m+1;j++)_ **{
if(j>=1)
dp[i][j]=max(dp[rt[i]][j],dp[i+1][j-1]+v[di[i]]);
}
}
cout<<dp[0][m+1];
return 0;
}
是因为数据太水吗?因为按理来说本题循环的时候j这一维是需要j-1推过来的,如果倒序循环应该不可以啊。。。求大佬解答
回复
共 4 条回复,欢迎继续交流。
正在加载回复...