WA on Sub #1 2,4,11
开了 O2 ,二进制优化
求调
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,s,m;
int dp[40005];
signed main()
{
cin >> n >> s >> m;
for(int i = 1;i <= n;i++)
{
int a,b,c;
int _v,_w,_s;
cin >> a >> b >> c;
_v = a,_w = b,_s = c;
int k = 0;
//二进制优化
while(_s)
{
int v,w;
if(_s >= (1 << k))
{
v = _v << k;
w = _w << k;
_s -= (1 << k);
}
else
{
v = _v * _s;
w = _w * _s;
_s = 0;
}
for(int j = m;j >= v;j--)
dp[j] = max(dp[j],dp[j - v] + w);
k++;
}
}
for(int i = 1;i <= s;i++)
{
int a,b,c;
cin >> a >> b >> c;
for(int j = 1;j <= m;j++)
for(int k = m;k >= j;k--)
dp[k] = max(dp[k],dp[k - j] + j * j * a + j * b + c);
}
cout << dp[m];
return 0;
}