1073. Pearls
之前用的是贪心来做,对于这组数据就出错了
10,10
5,15
10,23
看了一下别人的想法,用的是动态规划
具体的题解移步这里http://wenku.baidu.com/view/27cbabdb50e2524de5187ed3.html
证明连续性是为了保证动态规划方程的成立,如果连续性成立那么就是说明了子问题对于父问题没有影响。
连续性的具体解释如下
假设存在i,i+1,i+2三种珍珠,如果想要用高等级的珍珠代替低等级的珍珠,要么用i+2的代替i+1和i的,要么就只用i+1的代替i的,
不可以仅仅用i+2的代替i的,如果这样就不能保证最优解。
1#include<iostream>
2usingnamespacestd;
3intans[1010];
4intnum[1010];
5intcl[1010];
6intmain()
7{
8intt;
9cin>>t;
10while(t--)
11{
12intn;
13cin>>n;
14for(inti=1;i<=n;i++)
15cin>>num[i]>>cl[i];
16ans[0]=0;
17for(inti=1;i<=n;i++)
18{
19intmin=99999999;
20for(intj=0;j<i;j++)
21{
22intsum=0;
23for(intk=j+1;k<=i;k++)
24sum+=num[k];
25if(ans[j]+(sum+10)*cl[i]<min)
26{
27min=ans[j]+(sum+10)*cl[i];
28}
29}
30ans[i]=min;
31}
32cout<<ans[n]<<endl;
33}
34}