今天搞这个题开始有点思路,后来发现自己思路错了,后来分析了一下,原因如下,第一点没有完全读懂题,漏掉了一些条件,第二,还是没有掌握动态规划的思维过程。
大牛的博客
#include<cstdio>
#include<iostream>
using namespace std;
const int M = 110;
int num[M],price[M],sum[M],dp[M];
int main()
{
int T;
cin >> T;
while(T--)
{
int n;
cin >> n;
sum[0] = 0;
for(int i = 1;i <= n ; ++i)
{
cin >> num[i] >> price[i];
sum[i] = sum[i - 1] + num[i];
}
dp[0] = 0;
for(int i = 1; i <= n ; ++i)
{
dp[i] = dp[i - 1] + (num[i] + 10) * price[i];
for(int j = 0; j <= i - 1; ++j)
{
dp[i] = min(dp[i],(sum[i] - sum[j] + 10) * price[i] + dp[j]);
}
}
cout << dp[n] << endl;
}
return 0;
}
总结一下:第一步刻画一个最优解的结构特征时没有做好,下次做题时先明确最优解的结构特征是什么样的,不一定就是和套路一个样。