题目链接:http://acm.swust.edu.cn/problem/838/

Time limit(ms): 1000        Memory limit(kb): 10000

Description

我们定义了这个一个函数:

void Judge(int x, int &A, int &B, int &C)
{
int i;
for (A = ; A<x; A++)
if (x%A == )
{
B = x / A;
break;
}
C = ;
for (i = ; i <= x; i++)
if (x%i == )
C++;
}

对于每一个非素数X可以通过Judge函数得到A,B,C三个数。X的价值就定义为V=(A^B)%C

对于素数Y的价值V定义为:V=Y%10

现在给你一个大于1的正整数N,那么你将会有一个区间[2,N],现在你的问题是从中选择若干个互不相同的数,使其和不大于给定的另一个数S。同时使这些互不相等的数的价值总和最大。所以问题就是给定N和S,求出满足上诉条件的最大总价值。

Input

输入两个数N,S.(2<=N<=20000,2<=S<=60000)

 
Output

输出最大的总价值。

Sample Input

 
3 3

Sample Output

 
3
解题思路:一个有意思的题,考了不少知识点,就相当于给定一个区间的数,找出它们的权值,然后转换为一个0-1背包问题,大致思路如下
     (1)对于a,b,c的值按照给出代码直接模拟求就是了(注意稍稍来点优化,一开始超时了Orz~~~)
     (2)判断一个数是否为素数,打表
     (3)求非素数的价值二分快速幂高精度取模
     (4)求最大总价值0-1背包
 
 代码如下:
 //背包,素数表,高精度取模
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std; #define maxn 60005
typedef long long LL;
LL wi[maxn], vi[maxn], dp[maxn], n, s;
LL prime[maxn] = { , , }; void Prime(){
for (int i = ; i <= maxn; i++){
if (!prime[i]){
for (int j = ; i*j <= maxn; j++)
prime[i*j] = ;
}
}
} LL mulit_mod(LL a, LL b, LL c){
LL t = ;
while (b){
if (b & ) t = a*t % c;
b >>= ;
a = a*a % c;
}
return t;
} LL judge(LL x){
LL a, b, vi, t = (LL)sqrt((double)x);
if (!(x & )){
a = ;
b = x / ;
}
else{
for (a = ; a <= t; a++){
if (x%a == ){
b = x / a;
break;
}
}
}
vi = ;
//优化一下,否则超时
//for (LL i = 1; i <= x; i++){
// if (!(x%i)) vi++;
//}
for (LL i = ; i <= t; i++){
if (!(x%i)){
LL e = x / i;
if (e > i) vi += ;
else if (e == i)
vi += ;
}
}
return mulit_mod(a, b, vi);
} void init(){
Prime();
for (LL i = ; i < maxn; i++){
wi[i] = i;
if (prime[i]) vi[i] = judge(i);
else vi[i] = i % ;
}
} int main(){
init();
while (~scanf("%lld%lld", &n, &s)){
memset(dp, , sizeof(dp));
for (LL i = ; i <= n; i++){
for (LL j = s; j >= wi[i]; j--)
dp[j] = max(dp[j], dp[j - wi[i]] + vi[i]);
}
printf("%lld\n", dp[s]);
}
return ;
}
 

[Swust OJ 838]--最优价值(0-1背包+数学)的更多相关文章

  1. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  2. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  3. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  4. 手机APP例如抖音,让 people‘s 注意力集中到了 社会进化的 优胜部分 (优胜劣汰,什么是优) + 真善美,的 “美” , 促进了2极分化, 会产生强者俞强,弱者越弱,确实促进了信息的流通,传播了有用的东东 产生了独特的价值 而 如何 能计算出这些价值呢, 需要 数学 金融 财务 货币 量化吗

    手机APP例如抖音,让      people‘s  注意力集中到了  社会进化的 优胜部分  (优胜劣汰,什么是优)   +     真善美,的  “美”        , 促进了2极分化, 会产生 ...

  5. P1417 烹调方案 (0/1背包+贪心)

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  6. poj1417 带权并查集+0/1背包

    题意:有一个岛上住着一些神和魔,并且已知神和魔的数量,现在已知神总是说真话,魔总是说假话,有 n 个询问,问某个神或魔(身份未知),问题是问某个是神还是魔,根据他们的回答,问是否能够确定哪些是神哪些是 ...

  7. 洛谷 P1064 金明的预算方案 (有依赖的0/1背包)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...

  8. POJ 1636 Prison rearrangement DFS+0/1背包

    题目链接: id=1636">POJ 1636 Prison rearrangement Prison rearrangement Time Limit: 3000MS   Memor ...

  9. POJ 1745 【0/1 背包】

    题目链接:http://poj.org/problem?id=1745 Divisibility Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

随机推荐

  1. 【译】浅谈微软OneNote的自动化测试工具

    当我们向人们介绍OneNote的自动化时,有一个问题被相当频繁地提到,担忧我们的自动化框架中UI层面测试偏少. 我不喜欢基于UI的自动化.我知道在市场上有许多的自动化系统都是基于UI的自动化(点击按钮 ...

  2. C语言入门(3)——对Hello World程序的解释

    上篇我们写了一个最简单的程序.这个简单的程序包含了很多重要的内容.本篇我们通过这个最简单的Hello World程序逐一讲解C语言程序的一些特点. 打开Visual Studio 2013 通过菜单- ...

  3. javascript中的继承方法

    从Javascript面向对象编程(二):构造函数的继承这里,可以看到详细的说明. 我只是将其中的例子做成html文件,便于调试罢了. 1. 构造函数绑定 <html> <head& ...

  4. 开源ceph管理平台inkscope部署手册

    一.前情提要 关于inkscope就不做过多介绍了,就是ceph的一个开源管理控制平台,跟ceph官方的calamary以及intel的VSM差不多一类,只是各自侧重点不一样. 相对而言,因为inks ...

  5. SQL数据库插入文本信息

    文本内容

  6. MySQL学习笔记(4)

    插入记录① INSERT [INTO] tbl_name [(col_name,-)] {VALUES | VALUE} ({expr | DEFAULT},-),(-),- 可以用表达式或者DEFA ...

  7. web前端学习之路

    test 随着自己对于web前端知识了解的越多,越来越发现自己真的好菜 一脸茫然阶段 两年前大学接触网页设计,那时对于网页设计一窍不通,只是看了一本自己大学编的一本入门教材,我甚至不知道那些网页设计的 ...

  8. javascript中数据类型转换

    转换为数字: parseInt():转换为整数型数值:从下标0开始判断,若为数值型则继续直到遇到非数值,返回前面的整数值: 小数点无效,若0开始为非数值则返回NaN: 转换空字符串会返回NaN: 能转 ...

  9. C语言2

    函数是C语言的基本单位,类是java,c#,c++的基本单位 int abs(int x); double fabs(double x);   按变量的存储方式:静态变量.自动变量.寄存器变量 指针就 ...

  10. Linux 用户信息,组信息,密码信息!

    1: 用户信息保存在  /etc/passwd 文件下 2: 密码信息保存在 /etc/shadow 3: 组相关的信息 /etc/group