题意:

有n天,m门课和常数k;

每天上一门课,每门课程有两个属性,最少作业量a,最多作业量b,和难度c。

1<=a<=b<=1e16

c<=100

1<=n<=m<=50 1<=k<=100

要求所有课程的作业量总和最多。

要求除第一天外,其他情况下作业量是前一天加k或者前一天乘k。

输出每天课程的序号,以及该课程应该布置的作业量。

思路:

dp[i][j][k]代表第i门课,第j作业量,第k天的总和。

注意j是相对最少作业量的位移量。

#include<bits/stdc++.h>
using namespace std;
struct st{
int id,c;
unsigned long long a,b,num;
};
bool cmp(st a,st b){
return a.c<b.c;
}
st jilu[];
unsigned long long dp[][][];
int fi[][][],fj[][][];
stack<pair<unsigned long long,int> >ss;
int main()
{
int n,m;
unsigned long long kk;
scanf("%d%d%I64u",&n,&m,&kk);
for(int i=;i<m;i++){
int tmp;
scanf("%I64u%I64u%d",&jilu[i].a,&jilu[i].b,&jilu[i].c);
jilu[i].num=jilu[i].b-jilu[i].a;
jilu[i].id=i+;
}
sort(jilu,jilu+m,cmp);
for(int i=;i<m;i++){
for(int k=;k<=n;k++){
for(int j=;j<=jilu[i].num;j++){
if(i==){
if(k==)
dp[i][j][k]=j+jilu[i].a;
}
else if(k==){
dp[i][j][k]=j+jilu[i].a;
}
else{
long long t=jilu[i].a+j-kk;
for(int w=;w<i;w++){
if(jilu[w].c>=jilu[i].c)break;
if(jilu[w].a>t||jilu[w].b<t)continue;
long long tt=t-jilu[w].a;
if(dp[w][tt][k-]){
if(dp[i][j][k]<jilu[i].a+j+dp[w][tt][k-]){
dp[i][j][k]=jilu[i].a+j+dp[w][tt][k-];
fi[i][j][k]=w;
fj[i][j][k]=tt;
}
}
}
t=jilu[i].a+j;
if(t%kk==){
t/=kk;
for(int w=;w<i;w++){
if(jilu[w].c>=jilu[i].c)break;
if(jilu[w].a>t||jilu[w].b<t)continue;
long long tt=t-jilu[w].a;
if(dp[w][tt][k-]){
if(dp[i][j][k]<jilu[i].a+j+dp[w][tt][k-]){
dp[i][j][k]=jilu[i].a+j+dp[w][tt][k-];
fi[i][j][k]=w;
fj[i][j][k]=tt;
}
}
}
}
}
}
}
}
long long ans=;
int idi,idj;
for(int i=;i<m;i++){
for(int j=;j<=jilu[i].num;j++){
if(ans<dp[i][j][n]){
ans=dp[i][j][n];
idi=i;
idj=j;
}
}
}
if(ans==){
puts("NO");
return ;
}
while(n--){
int n_idi=fi[idi][idj][n+];
int n_idj=fj[idi][idj][n+];
if(n!=)
ss.push(make_pair(dp[idi][idj][n+]-dp[n_idi][n_idj][n],jilu[idi].id));
else
ss.push(make_pair(dp[idi][idj][n+],jilu[idi].id));
idi=n_idi;idj=n_idj;
}
puts("YES");
while(!ss.empty()){
pair<unsigned long long,int>t=ss.top();
ss.pop();
printf("%d %I64u\n",t.second,t.first);
}
}

Codeforces 119C DP的更多相关文章

  1. Two Melodies CodeForces - 813D (DP,技巧)

    https://codeforces.com/problemset/problem/813/D dp[i][j] = 一条链以i结尾, 另一条链以j结尾的最大值 关键要保证转移时两条链不能相交 #in ...

  2. Consecutive Subsequence CodeForces - 977F(dp)

    Consecutive Subsequence CodeForces - 977F 题目大意:输出一序列中的最大的连续数列的长度和与其对应的下标(连续是指 7 8 9这样的数列) 解题思路: 状态:把 ...

  3. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

  4. Codeforces 721C [dp][拓扑排序]

    /* 题意:给你一个有向无环图.给一个限定t. 问从1点到n点,在不超过t的情况下,最多可以拜访几个点. 保证至少有一条路时限不超过t. 思路: 1.由无后向性我们可以知道(取决于该图是一个DAG), ...

  5. CodeForces 607C (DP) Hard problem

    题目:这里 题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于 该字符串进行或不进行这项操作 ...

  6. Codeforces 611d [DP][字符串]

    /* 题意:给一个长度不超过5000的字符串,每个字符都是0到9的数字. 要求将整个字符串划分成严格递增的几个数字,并且不允许前导零. 思路: 1.很开心得发现,当我在前i个区间以后再加一个区间的时候 ...

  7. Codeforces 404D [DP]

    /* 我是一个习惯后悔,但是没办法忍受内疚感的二货== 这题是个无脑dp,但是比赛大概20min没出...其实最后5min我好好想想简单化边界条件,可以出的. 题意: 给你一个长度为1e6的由?*01 ...

  8. Codeforces 1096F(dp + 树状数组)

    题目链接 题意: 对于长度为$n$的排列,在已知一些位的前提下求逆序对的期望 思路: 将答案分为$3$部分 $1.$$-1$与$-1$之间对答案的贡献.由于逆序对考虑的是数字之间的大小关系,故假设$- ...

  9. Codeforces 354B dp Game with Strings dp

    Game with Strings 题意并不是在图上走,看了好久才看出来.. dp[ i ][ mask ]表示从 i 层开始走,起点有mask个, a的个数-b的个数的  最大值或者最小值. #in ...

随机推荐

  1. Dom实例:数据自增、搜索框及跑马灯

    数据自增 功能:当点击add按扭后,div标签中的数据自动+1,实现网页的动态化 <!DOCTYPE html> <html lang="en"> < ...

  2. 基于jQuery动态创建html元素

    在做web前端开发的时候,经常遇到一些数据多少或则类型不能在运行之前就确定下来的情况,此时,数据的展示,就要借助于动态创建html元素来展示了. 常见的动态创建HTML元素的方式,有如下几种,大体都差 ...

  3. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/02/2336147.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  4. PHP析构函数与垃圾回收

    析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行. GC (Garbage Collector) 在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾.PHP会将其在内存中销毁.这是PHP ...

  5. android学习笔记二

    ADT(Android Development Tools)安卓开发工具. android项目目录简介 ==> src==>源代码文件 res==>资源文件 AndroidManif ...

  6. HDU 3480 division

    题目大意:一个有n个数的集合,现在要求将他分成m+1个子集,对子集i设si表示该集合中最大数与最小数的差的平方.求所有si的和的最小值.n<=10000,m<=5000. 分析:最优解的m ...

  7. 黄聪:wordpress后台导致fonts.googleapis.com、ajax.googleapis.com加载慢的解决方法

    方法1.使用我做的插件.[googleapis-to-useso] 方法2.在functions.php文件里面添加下面的代码就行了. if(is_admin()) { function hcsem_ ...

  8. (C#) System.BadImageFormatException: An attempt was made to load a program with an incorrect format.

    ASP.NET: System.BadImageFormatException: An attempt was made to load a program with an incorrect for ...

  9. 数据库随机取n条记录

    SQL Server SELECT TOP N  *  FROM  表名  ORDER BY  NEWID() My SQL  SELECT  *  FROM  表名 ORDER BY RAND() ...

  10. Maven使用--打包和运行

        将项目进行编译.测试后,下一个重要步骤就是打包.简单执行命令mvn clean package进行打包.Maven会在打包前执行编译.测试等操作.     在打包后,执行安装任务install ...