2 条题解
-
0
#include<bits/stdc++.h> using namespace std; int a[21], dp[21], mp[21][21], nxt[21]; int main() { int n;scanf("%d", &n); memset(dp, 0, sizeof(dp)); for(int i=1;i<=n;i++) scanf("%d", &a[i]), dp[i]=a[i]; for(int i=1;i<n;i++)for(int j=i+1;j<=n;j++) scanf("%d", &mp[i][j]); for(int i=n-1;i>=1;i--)for(int j=i+1;j<=n;j++)if(mp[i][j]) if(dp[i]<dp[j]+a[i]) { dp[i]=dp[j]+a[i]; nxt[i]=j; } int t=1;for(int i=2;i<=n;i++)if(dp[i]>dp[t]) t=i; int ans=dp[t]; while(t!=0) { printf("%d ", t); t=nxt[t]; } printf("\n"); printf("%d\n", ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; int a[21],dp[21],mp[21][21],nxt[21]; int main() { int n;scanf("%d",&n); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) scanf("%d",&a[i]),dp[i]=a[i]; for(int i=1;i<n;i++)for(int j=i+1;j<=n;j++) scanf("%d",&mp[i][j]); for(int i=n-1;i>=1;i--)for(int j=i+1;j<=n;j++)if(mp[i][j]) if(dp[i]<dp[j]+a[i]) { dp[i]=dp[j]+a[i]; nxt[i]=j; } int t=1;for(int i=2;i<=n;i++)if(dp[i]>dp[t]) t=i; int ans=dp[t]; while(t!=0) { printf("%d ",t); t=nxt[t]; } printf("\n"); printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 683
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 15
- 已通过
- 12
- 上传者