摘要: 题意:海滩上有n个石头,每个石头有两个值 a,b ,每取一个石头,所有石头的a值都要减去取的那个石头的b值(不包括已经取到过的了),问你最后你能取到石头a的和的最大值是多少;解题思路:1,我们可以知道,在选取同样的石头中,b值小的我们是必需要先取的才能狗得到最大值,所以我们先对石头的b值进行排序,然后再进行dp,dp[i][j]表示 i 之后还有多少个石头要取,如果要取这个时候 得到的值 为 a[i] - j*b[i];解题代码: 1 #include 2 #include 3 #include 4 struct node 5 { 6 int a,b; 7 int c; ... 阅读全文
posted @ 2014-04-01 11:54 dark_dream 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题意:海滩上有n个石头,每个石头有两个值 a,b ,每取一个石头,所有石头的a值都要减去取的那个石头的b值(包括已经取到过的了),问你最后你能取到石头a的和的最大值是多少;解题思路:如果我们取1个则 和为 a[k] - b[k];(任选)如果我们取 2个则和为 a[i] - b[i] - b[j] + a[j] - b[i] - b[j] = a[i] - 2 * b[i] + a[j] - 2* b[j];以此类推,最后我们知道取k个 的和就是 k个 a[i] - k*b[i] 的和; 所以我们只需要枚举 我们要取的个数,然后对a[i] - k*b[i]进行排序,取前k个即可解题代码: 1. 阅读全文
posted @ 2014-04-01 09:01 dark_dream 阅读(209) 评论(0) 推荐(0) 编辑