题目链接: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. 解决android开发webservice的发布与数据库连接的问题

    由于app后续开发的需要,移植了两次webservice和数据库,遇到了不少问题,也花费了很多时间,实践告诉我要学会寻找问题的根源,这样才能在开发中节省时间,尽快解决问题!好,废话不多说,转入正题…… ...

  2. Exec sql/c

    Exec sql/c 利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足. 嵌入SQL的高级语言称为主语言或宿主语言. 在混合编程中,SQL语句负责操作数据库,高级语言语句负责控制程序流程 ...

  3. [LeetCode][Python]14: Longest Common Prefix

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/longest ...

  4. nginx File not found 错误分析与解决方法

    使用php-fpm解析PHP,出错提示如下:"No input file specified","File not found",原因是php-fpm进程找不到 ...

  5. #include <thread>

    1 detach 脱离当前主线程,自由执行,乱序; 2 join() 等待模式,执行完再执行下一个 3 std::this_thread::get_id() 获取当前线程编号 4 std::threa ...

  6. python setattr(),getattr()函数

    setattr(object,name,value): 作用:设置object的名称为name(type:string)的属性的属性值为value,属性name可以是已存在属性也可以是新属性. get ...

  7. iPhone 禁止 Safari 页面上下拖动反弹

    解决方法:  <body ontouchmove="event.preventDefault()"  >     手机端设置:  <meta content=&q ...

  8. How to Type(dp)

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. 字典 -- 数据结构与算法的javascript描述 第七章

    字典 字典是一种以键-值对形式存储数据的数据结构 最基本功能规划 add 添加数据到字典 remove 从字典中移除数据 get 从字典中取出数据 count 统计字典数据量 find 查找数据在字典 ...

  10. HTML系列(八):表格

    一.基本表格: 表格标记<table>,行标记<tr>,单元格标记<td> 基本语法: <table> <tr> <td>单元格 ...