1073. Pearls


之前用的是贪心来做,对于这组数据就出错了

10,10

5,15

10,23

看了一下别人的想法,用的是动态规划

传送门http://soj.me/1073

具体的题解移步这里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}

优质内容筛选与推荐>>
1、Struts2基础使用教程:OGNL
2、MWC飞控增加声纳定高的方法
3、(二)scala构造器和伴生对象
4、python3 使用aria2下载的一个脚本
5、暑假训练-藏妹子之处(递推)


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号