RQNOJ 117 最佳课题选择:多重背包
题目链接:https://www.rqnoj.cn/problem/117
题意:
NaCN_JDavidQ要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择。
由于课题数有限,NaCN_JDavidQ不得不重复选择一些课题。
对于某个课题i,若NaCN_JDavidQ计划一共写x篇论文,则完成该课题的论文总共需要花费Ai*(x^Bi)个单位时间(系数Ai和指数Bi均为正整数)。
给定与每一个课题相对应的Ai和Bi的值,请帮助NaCN_JDavidQ计算出如何选择论文的课题使得他可以花费最少的时间完成这n篇论文。
题解:
转化问题:
(将对象由论文转化为课题)
有m个课题。
对于每个课题,你可以写任意篇论文。
问你恰好写完n篇论文的最小时间。
表示状态:
dp[i][j] = min time
i:考虑到第i个课题
j:已经完成了j篇论文
找出答案:
ans = dp[m][n]
如何转移:
now: dp[i][j]
dp[i+1][j+k] = min dp[i][j] + a[i]*(k^b[i])
第i个课题写了k篇论文
边界条件:
dp[0][0] = 0
others = -1
注:本题会爆int。。。
AC Code:
// state expression:
// dp[i][j] = min time
// i: considering ith project
// j: finished j papers
//
// find the answer:
// dp[m][n]
//
// transferring:
// now: dp[i][j]
// dp[i+1][j+k] = min dp[i][j] + a[i]*k^b[i]
//
// boundary:
// dp[0][0] = 0
// others = -1
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 205
#define MAX_M 25 using namespace std; int n,m;
int a[MAX_M];
int b[MAX_M];
long long dp[MAX_M][MAX_N]; void read()
{
cin>>n>>m;
for(int i=;i<m;i++)
{
cin>>a[i]>>b[i];
}
} long long quick_pow(long long n,long long k)
{
long long ans=;
while(k)
{
if(k&)
{
ans*=n;
}
n*=n;
k>>=;
}
return ans;
} void solve()
{
memset(dp,-,sizeof(dp));
dp[][]=;
for(int i=;i<m;i++)
{
for(int j=;j<=n;j++)
{
if(dp[i][j]!=-)
{
for(int k=;j+k<=n;k++)
{
long long now=dp[i][j]+a[i]*quick_pow(k,b[i]);
if(dp[i+][j+k]==- || dp[i+][j+k]>now)
{
dp[i+][j+k]=now;
}
}
}
}
}
} void print()
{
cout<<dp[m][n]<<endl;
} int main()
{
read();
solve();
print();
}
RQNOJ 117 最佳课题选择:多重背包的更多相关文章
- 洛谷 P1336 最佳课题选择
P1336 最佳课题选择 题目提供者 yeszy 标签 动态规划 福建省历届夏令营 传送门 难度 尚无评定 题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课 ...
- P1336 最佳课题选择
P1336 最佳课题选择 题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同 ...
- luogu P1336 最佳课题选择 |背包dp
题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i ...
- [codevs1554]最佳课题选择
题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i ...
- 【线性DP】【lgP1336】最佳课题选择
传送门 Description Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具 ...
- luogu P1336 最佳课题选择
题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i ...
- luogu1336 最佳课题选择
背包问题加强版orz #include<iostream> #include<cstdio> #include<cmath> #include<cstring ...
- 洛谷 题解 P1336 【最佳课题选择】
详细解析解题过程 设计状态 dp[i][j]表示前i节课题写j篇论文花费的最少时间 初始数组 for(int i=0;i<=20;i++) for(int j=0;j<=200;j++)d ...
- hdu 2191多重背包
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
随机推荐
- 通过apache,和nginx模块去除html中的空格和tab
最近一个项目中,合作方要求去除html中的空格,不想改代码,所以百度了一下通过apache,和nginx模块去除html中的空格和tab的方案,下面记录下来: 一.nginx nginx可以通过mod ...
- jsp中jquery用法一步刷新 验证用户名是否存在
<script type="text/javascript"> /* $(document).ready(function(){ var id="ha&quo ...
- Android解析聚合数据之天气预报
免费天气预报API:https://www.juhe.cn/docs/api/id/73 ,申请APPKEY MainActivity.java <span style="font-s ...
- 转:HDMI介绍与流程
HDMI介绍与流程 HDMI,全称为(High Definition Multimedia Interface)高清多媒体接口,主要用于传输高清音视频信号. HDMI引脚: HDMI有A,B,C, ...
- getOutString 输出弹出字符串
输入字符串长度,字符串,计数m.从前往后计数,当数到m个元素时,第m个元素出列,同时将该元素赋值给m,然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字.输出出队队列. 例如: ...
- 基于togglepoolmember.pl编写F5设备控制模块
为了方便利用python对F5设备进行操作,本文将togglepoolmember.pl对F5设备的控制写成了python模块,源代码例如以下: #!/usr/bin/python # -*- cod ...
- 数据挖掘之Slope One
计算偏差: card() 表示集合包含的元素数量. http://www.cnblogs.com/similarface/p/5385176.html 论文地址:http://lemire.me/fr ...
- 调试Scrapy过程中的心得体会
1.大量抓取网页时出现“Memory Error”解决办法:设置一个队列,每当爬虫空闲时才向队列中放入请求,例如: from scrapy import signals, Spider from sc ...
- STM32 I2C
STM32 I2C 搞了几天了,比较郁闷,写点东西给那些正在郁闷的同志 // 好使的,也是范例的代码 cnt = TIME_OUT; while (cnt-- && !I2C_Chec ...
- A和B是好友,他们经常在空闲时间聊天,A的空闲时间为[a1 ,b1 ],[a2 ,b2 ]..[ap ,bp ]。B的空闲时间是[c1 +t,d1 +t]..[cq +t,dq +t],这里t为B的起床时间。这些时间包括了边界点。B的起床时间为[l,r]的一个时刻。若一个起床时间能使两人在任意时刻聊天,那么这个时间就是合适的,问有多少个合适的起床时间?
// ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<vector> ...