【noi 2.6_7113】Charm Bracelet(DP)

题意:N个饰物,有重量和渴望程度。问在M的重量限制内能达到的最大的渴望度。

解法:经典的01问题,但有一个小技巧值得记住:用if比较大小比调用max函数快了不少,这题有100ms左右。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6 #define VV 12900
 7 int w[VV],d[VV],f[VV];
 8
 9 int main()
10 {
11     int n,V;
12     scanf("%d%d",&n,&V);
13     for (int i=1;i<=n;i++)
14       scanf("%d%d",&w[i],&d[i]);
15     memset(f,0,sizeof(f));
16     for (int i=1;i<=n;i++)
17      for (int j=V;j>=w[i];j--)
18        if (f[j-w[i]]+d[i]>f[j]) f[j]=f[j-w[i]]+d[i];
19     printf("%d\n",f[V]);
20     return 0;
21 }
时间: 2024-08-10 21:14:54

【noi 2.6_7113】Charm Bracelet(DP)的相关文章

【noi 2.6_3531】判断整除(DP)

题意:给一个正整数数列,可将其相加或相减,问是否有一个结果能被K整除. 解法:似上一题“糖果”的状态定义,f[i][j]表示是否有一个选了前 i 个数的结果模K余j. P.S. 可以用滚动数组. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 using namespace std; 6 7 const int N=10010,K=110; 8

【noi 2.6_4982】踩方格(DP)

题意:一个无限大的方格矩阵,能向北.东.西三个方向走.问走N步共有多少种不同的方案. 解法: f[i]表示走 i 格的方案数. 状态转移方程推导如下——设l[i],r[i],u[i]分别为第 i 步向西.东.北的方案数,f[i]为总方案数.l[i]=l[i-1]+u[i-1], r[i]=r[i-1]+u[i-1], u[i]=l[i-1]+r[i-1]+u[i-1]f[i]=l[i]+r[i]+u[i]    =2*l[i-1]+2*r[i-1]+3*u[i-1]    =2*f[i-1]+u

【noi 2.6_6045】开餐馆(DP)

题意:有N个地址,从中选一些开餐馆,要保证相邻餐馆的距离大于k.问最大利润. 解法:f[i]表示在前 i 个地址中选的最大利润. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 using namespace std; 6 7 const int Maxn=110,Maxm=1000010; 8 int m[Maxn],p[Maxn]; 9 i

【noi 2.6_6049】买书(DP)

题意:有N元,有无限多本10.20.50和100元的书,问有几种购买方案. 解法:f[i]表示用 i 元的方案数.还有一个 j 循环这次买多少元的书. 注意——要先 j 循环,再 i 循环.因为要先考虑第一种书,再是下一种书.若先 i 循环,后 j 循环,则相同的购买方案由购买次序不同而重复计算. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5

【noi 2.6_9271】奶牛散步(DP)

这题与前面的“踩方格”重复了,而且是大坑题!题目漏写了取模12345的条件! 详细解析请见我之前的博文——http://www.cnblogs.com/konjak/p/5936888.html 而这坑在我打了高精+滚动之后才知道..我先把这个代码贴上来.. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 using namespace std

【noi 2.5_1789】算24(dfs)

最开始我想的是全排列+枚举符号和括号的方法,但是我自己倒腾了很久还是打不对,只好向他人请教.正解很机智——直接随意将几个数“捆绑”在一起,值存在其中一个数上,其他数标记不可再选,直到只剩下一个数,再判断这个数是否为24. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<algorithm> 5 #include<iostream> 6 using name

【USACO 2011 Open】修剪草坪(DP)

题目描述 在一年前赢得了小镇的最佳草坪比赛后,FJ 变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,FJ 希望能够再次夺冠.然而,FJ 的草坪非常脏乱,因此,FJ 只能够让他的奶牛来完成这项工作.FJ 有 N 只排成一排的奶牛,编号为 1...N.每只奶牛的效率是不同的,奶牛 i 的效率为 E_i.靠近的奶牛们很熟悉,因此,如果 FJ 安排超过 K 只连续的奶牛,那么,这些奶牛就会罢工去开派对:).现在 FJ 需要你的帮助,计算 FJ 可以得到的最大效率,并且该方案中没有连续的

【POJ 1191】 棋盘分割(DP)

[POJ 1191] 棋盘分割(DP) Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13811   Accepted: 4917 Description 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘.(每次切割都只能沿着棋盘格子的边进行) 原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分

【VMCloud云平台】SCOM配置(十三)-创建SLO(二)

SCCM中有一种功能叫做安全基线扫描,可以针对安全策略来设置基线检测.在SCOM中也有相似的功能,那就是SLO,可以针对某些条件进行SLO判断,即上一篇讲完创建SLO规则后,这一篇将讲述如何利用该SLO进行创建仪表盘,如何以报表形式呈现(紫色为完成实施,红色为实施中): 1. 登录到SCOM管理控制台,点击我的工作区,右键新建-仪表盘 2. 接着选择视图布局-服务级别仪表板: 3. 输入仪表板名称: 4. 选择添加SLO规则: 5. 确认摘要并点击创建: 6. 创建成功: 7. 稍等片刻就可以看