【Link】:

【Description】



给你n个集合;

每个集合都包含一些不同面额的邮票;

(每种邮票都当做有无限张)

然后给你一封信上最多能贴的邮票张数S;

问你,哪一个集合的邮票;

能够贴出来从1开始的,最大的连续邮票面额

优先输出小的集合,集合大小一样的话,从大到小排序后,字典序小的优先输出;

【Solution】



每个邮票都是一个物品;

假设每个邮票都最多能拿S个;

做一个多重背包即可

这里

f[i][j]表示前i个邮票,邮票的总面额为j的情况最少需要的邮票张数;

对每个集合都做一个这样的多重背包;

然后根据f[n][]获取每个集合能获得的最大连续面额就好了;

(根据f[n][j]是否小于等于s判断能不能获得这个面额)

最后输出,是按照场宽输出。不然会PE



【NumberOf WA】



2



【Reviw】



背包的变形。

背包可以做很多事情.嗯。。



【Code】

#include <bits/stdc++.h>
using namespace std; const int NN = 10;
const int S = 10;
const int MAX_SIZE = 1000;
const int INF = 0x3f3f3f3f; int s,N,num[S+5],f[NN+5][MAX_SIZE+5];
vector <int> v[NN+5]; int get_ans(int idx,int n){
memset(f,INF,sizeof f);
f[0][0] = 0;
for (int i = 0;i <= n-1;i++)
for (int j = 0;j <= MAX_SIZE;j++)
if (f[i][j]<INF){
for (int k = 0;k <= s;k++){
int temp = j + k*v[idx][i+1];
f[i+1][temp] = min(f[i+1][temp],f[i][j]+k);
}
}
for (int i = 0;i <= MAX_SIZE+1;i++)
if (f[n][i] > s) return i-1;
return 520;
} int cmp(int idx1,int idx2){
for (int i = num[idx1];i >= 1;i--)
for (int j = num[idx2];j >= 1;j--)
if (v[idx1][i]!=v[idx2][j]){
if (v[idx1][i] < v[idx2][j])
return 1;
else
return 0;
}
return 1;
} int main(){
//freopen("F:\\rush.txt","r",stdin);
for (int i = 1;i <= 10;i++)
v[i].resize(11);
while (~scanf("%d",&s) && s){
scanf("%d",&N);
int ma = 0,maxid = 1;
for (int i = 1;i <= N;i++){
scanf("%d",&num[i]);
for (int j = 1;j <= num[i];j++)
scanf("%d",&v[i][j]);
int temp1 = get_ans(i,num[i]);
if (temp1 > ma){
ma = temp1;
maxid = i;
}else if (temp1 == ma){
if (num[i] < num[maxid]){
maxid = i;
}else if (num[i] == num[maxid]){
if (cmp(i,maxid) == 1)
maxid = i;
}
}
}
printf("max coverage =%4d :",ma);
for (int j = 1;j <= num[maxid];j++)
printf("%3d",v[maxid][j]);
puts("");
}
return 0;
}

【Uva 242】Stamps and Envelope Size的更多相关文章

  1. 【UOJ#242】【UR#16】破坏蛋糕(计算几何)

    [UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...

  2. 【UVA 437】The Tower of Babylon(记忆化搜索写法)

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  3. 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵

    偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...

  4. 【贪心+中位数】【UVa 11300】 分金币

    (解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...

  5. 【UVa 10881】Piotr's Ants

    Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...

  6. 【UVa 116】Unidirectional TSP

    [Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  7. 【UVa 1347】Tour

    [Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  8. 【uva 1025】A Spy in the Metro

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  9. 【Uva 1630】Folding

    [Link]: [Description] 你能对字符串进行压缩的操作; 即把连续出现的相同的子串改成它出现的次数+这个最基本的字符串的形式; 问你这个字符串最短能被压缩得多短; [Solution] ...

随机推荐

  1. POJ 3254 Corn Fields 状态压缩DP (C++/Java)

    id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...

  2. 实习第四天(bboss框架学习)

    现在好像比较使用的管理工具是gradle管理工具,学长说这个管理工具比maven管理工具要好用! 我今天主要就是想要安装好的gradle这个管理工具,但是可能是我的eclispe版本的问题,我没能安装 ...

  3. codeforces@281 B

    shui #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...

  4. hdoj--1301--Jungle Roads(克鲁斯卡尔)

    Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  5. [JSOI2008] [BZOJ1567] Blue Mary的战役地图 解题报告 (hash)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1567 Description Blue Mary最近迷上了玩Starcraft(星际争霸 ...

  6. vue -- 7 个 有用的 Vue 开发技巧

    1 状态共享 随着组件的细化,就会遇到多组件状态共享的情况, Vuex当然可以解决这类问题,不过就像 Vuex官方文档所说的,如果应用不够大,为避免代码繁琐冗余,最好不要使用它,今天我们介绍的是 vu ...

  7. List exercise

    The slice operator can take a third argument that determines the step size, so t[::2] creates a list ...

  8. MFC的学习路线

    首先,MFC是比较难的!比C#和VB要难得多.MFC是基于C++的.首先C++必须熟悉.MFC主要是学习里面的控件的使用. 建议学习路线: 1. 易语言中文编程从入门到精通: https://deta ...

  9. bzoj 3408 热浪 最短路

    一道最短路的模板题,就当练习一下SPFA和dijkstra了 SPFA #include<bits/stdc++.h> using namespace std; struct edge{ ...

  10. HDU-1069 Monkey and Banana DAG上的动态规划

    题目链接:https://cn.vjudge.net/problem/HDU-1069 题意 给出n种箱子的长宽高 现要搭出最高的箱子塔,使每个箱子的长宽严格小于底下的箱子的长宽,每种箱子数量不限 问 ...