hdu 2660 Accepted Necklace (二维01背包)
来源:互联网 发布:牧马人鼠标逆战宏数据 编辑:程序博客网 时间:2024/05/17 02:06
Accepted Necklace
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 25 Accepted Submission(s) : 5
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
I have N precious stones, and plan to use K of them to make a necklace for my mother, but she won't accept a necklace which is too heavy. Given the value and the weight of each precious stone, please help me find out the most valuable necklace my mother will accept.
Input
The first line of input is the number of cases.
For each case, the first line contains two integers N (N <= 20), the total number of stones, and K (K <= N), the exact number of stones to make a necklace.
Then N lines follow, each containing two integers: a (a<=1000), representing the value of each precious stone, and b (b<=1000), its weight.
The last line of each case contains an integer W, the maximum weight my mother will accept, W <= 1000.
For each case, the first line contains two integers N (N <= 20), the total number of stones, and K (K <= N), the exact number of stones to make a necklace.
Then N lines follow, each containing two integers: a (a<=1000), representing the value of each precious stone, and b (b<=1000), its weight.
The last line of each case contains an integer W, the maximum weight my mother will accept, W <= 1000.
Output
For each case, output the highest possible value of the necklace.
Sample Input
1 2 1 1 1 1 1 3
Sample Output
1
分析:
简单背包
f[j][k] 表示一个体积为j,最多能放k个precious stone的背包所能达到的最大价值。
状态转移方程: f[j][k] = max{f[j-a[i].w][k-1]} +a[i].v;
#include <stdio.h>#include <string.h>struct node { int v,w;} a[21];#define INF 0xfffffffint f[1005][21];int n, k,w;void dp() { int i,j, p; int max; memset(f,0,sizeof(f)); for(i=0; i<n; i++) { for(j=w; j>=a[i].w; j--) { for(p=1; p<=k; p++) { max = f[j][p]; if(max<f[j-a[i].w][p-1]+a[i].v) max = f[j-a[i].w][p-1]+a[i].v; f[j][p] = max; } } } max =-INF; for(i=0; i<w; i++) if(max<f[i][k]) max = f[i][k]; printf("%d\n",max);}int main() { int T,i; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); for(i=0; i<n; i++) scanf("%d%d",&a[i].v,&a[i].w); scanf("%d",&w); dp(); } return 0;}
- hdu 2660 Accepted Necklace (二维01背包)
- 【hdu 2660】Accepted Necklace 二维费用01背包
- HDOJ题目2660 Accepted Necklace(二维01背包)
- hdu 2660 Accepted Necklace (二维背包 简单题)
- HDU 2660 Accepted Necklace(DFS解01背包)
- HDU 2660 Accepted Necklace (01背包,dfs)
- hdu2660 Accepted Necklace (二维背包)
- hdu2660 Accepted Necklace 二维背包
- hdu 2660 Accepted Necklace(01-背包变形 || DFS)
- 【DP】 HDU 2660 Accepted Necklace 限制背包
- hdu 2660 Accepted Necklace
- hdu-2660 Accepted Necklace
- hdu 2660 Accepted Necklace
- HDU 2660 Accepted Necklace
- HDU 2660 Accepted Necklace
- hdu 2660 Accepted Necklace
- HDU 2660 Accepted Necklace
- HDU 2660 Accepted Necklace
- warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]错误
- 【js学习笔记-013】--字符串直接量
- 使用.NET(c#)操作SQLLITE
- vimrc
- 谢超:大数据下的BI新特性
- hdu 2660 Accepted Necklace (二维01背包)
- 【卿云人物】微软新晋藩主——复旦大学87届计算机系校友陆奇
- mmc提取子字符
- HDU1829
- 洪恩小乌龟学美语
- POJ 3694 Network(双连通分量缩点 + 路径压缩)
- 颇有微词 小模式 大蓝海 by 曹继忠 - 2013中国SEO排行榜
- C# 弹出窗体位置设定
- Cornerstone Svn简单使用指南