求助dalao
查看原帖
求助dalao
942520
xy_303楼主2023/10/15 17:31

为啥这样做会RE&WA QAQ

#include<bits/stdc++.h>  
using namespace std;  
#define ll long long  
const int maxn = 15;  
const int maxk = 101;  
struct edge{  
    int to, nxt;  
}edge[maxn*maxn];  
int head[maxn], cnt;  
int n, k, a[maxn], b[maxn], dp[maxn][maxk], sum[maxn][maxk];  
bool vis[maxn];  
void add(int x, int y) {  
    edge[++cnt].to = y; edge[cnt].nxt = head[x]; head[x] = cnt;  
}  
void dfs(int x) {  
    for(int i = head[x]; i; i = edge[i].nxt) {  
        int y = edge[i].to;  
        if(!vis[y]) {  
            vis[y] = true;  
            dfs(y);  
            sum[x][++cnt] = sum[y][cnt] + dp[y][cnt];  
        }  
    }  
    dp[x][1] = a[x];  
    for(int i = 2; i <= k && !vis[x]; i++) {  
        dp[x][i] = max(dp[x][i-1], sum[x][i-1] - sum[x][i-2]);  
    }  
}  
int main() {  
    scanf("%d%d", &n, &k);  
    for(int i = 1; i <= n; i++) {  
        scanf("%d", &a[i]); b[i] = 0;  
        for(int j = 1; j <= n; j++) if(i != j) add(j, i);  
    }  
    dfs(1); printf("%.6lf\n", (double)dp[n][k]/k);  
    return 0;  
}
2023/10/15 17:31
加载中...