DAG上的dp

因为本身升序就是拓扑序,所以建出图来直接从1到ndp即可,设f[i][j]为到i花费了j

#include<iostream>
#include<cstdio>
using namespace std;
const int N=1005,inf=1e9+7;
int n,m,b,h[N],cnt,f[N][N],ans=-inf;
struct qwe
{
int ne,to,va,c;
}e[N*10];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v,int w,int c)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
e[cnt].va=w;
e[cnt].c=c;
h[u]=cnt;
}
int main()
{
n=read()+1,m=read(),b=read();
for(int i=1;i<=m;i++)
{
int x=read(),y=read(),c=read(),z=read();
add(x+1,x+1+y,z,c);
}
for(int i=1;i<=n;i++)
for(int j=0;j<=b;j++)
f[i][j]=-inf;
f[1][0]=0;
for(int u=1;u<=n;u++)
for(int i=h[u];i;i=e[i].ne)
for(int j=e[i].va;j<=b;j++)
f[e[i].to][j]=max(f[e[i].to][j],f[u][j-e[i].va]+e[i].c);
for(int i=0;i<=b;i++)
ans=max(ans,f[n][i]);
printf("%d\n",ans<0?-1:ans);
return 0;
}

最新文章

  1. UML序列图总结(Loop、Opt、Par和Alt)
  2. android性能测试与调优:使用 DDMS 查看内存分配情况
  3. bwa用法
  4. [ZigBee] 1、 ZigBee简介
  5. PHP分页做法
  6. GitHub上整理的一些工具[转载]
  7. php通过curl调用jpush接口实现消息的推送
  8. mysql 创建表 create table详解
  9. 201521123092《Java程序设计》第七周学习总结
  10. promise入门demo
  11. Message高级特性 &amp; 内嵌Jetty实现文件服务器
  12. error: 40 - 无法打开到 SQL Server 的连接
  13. 全栈爬取-Scrapy框架(CrawlSpider)
  14. mui 下拉刷新和上拉加载
  15. spring事物深入了解
  16. Material Designer的低版本兼容实现(十二)—— Slider or SeekBar
  17. c#中lock的使用(用于预约超出限额的流程)
  18. InnoDB 锁
  19. web.xml 中以编码方式添加filter并设置初始化参数AbstractAnnotationConfigDispatchServletInitializer
  20. 【语音识别】Microsoft Speech Platform 自学笔记2 环境要求与安装过程

热门文章

  1. IDEA的Maven Projects无法显示
  2. Leetcode 179.最大数
  3. oracle基于归档的增量异地恢复 --异地新增数据文件问题
  4. 2-sat相关知识
  5. The Java library for converting Wikipedia wikitext notation to HTML
  6. 从零开始写STL-容器-双端队列
  7. js转xml时 将xml中不需要的字符替换掉的方法replace()
  8. JSP基础教程:tutorialspoint-jsp
  9. JDBC的存储过程
  10. openstack setup demo Image service