30pts求助,悬关

P1336 最佳课题选择

转移时 k 的范围不对 最大值应为 200 或 j ```cpp #include <bits/stdc++.h> #define int long long using namespace std; int v[21][201]; int w[21][201]; int dp[201]; int pow(int a,int n) { int ans = 1; for(int i = 1;i <= n;i++) ans *= a; return ans; } signed main() { int n,m; cin >> n >> m; memset(dp,0x3f,sizeof(dp)); dp[0] = 0; for(int i = 1;i <= m;i++) { int a,b; cin >> a >> b; for(int j = 1;j <= 200;j++) { v[i][j] = j; w[i][j] = a * pow(j,b); } } for(int i = 1;i <= m;i++) for(int j = n;j;j--) for(int k = 0;k <= 200;k++) { if(j - v[i][k] >= 0) dp[j] = min(dp[j],dp[j - v[i][k]] + w[i][k]); } cout << dp[n]; return 0; }
by zyh_helen @ 2023-07-29 17:39:08


@[zyh_helen](/user/609439) thx,已关注,已ac
by Zpril_20211017 @ 2023-08-01 09:08:06


|