解题思路:C语言 常规实现 
注意事项:这道题的话比较特殊,尝试从时间大的往小的逼近,dp[i]表示的是第i到结束这段时间的最大空闲时间

参考代码:

#include<stdio.h>

#include<stdlib.h>

int max( int a , int b ) {

if( a < b ) a = b ; 

return a ; 

}

int main (  ) {

int n , i , j , s ;  

int dp[10001] = {0} , b[10001] = {0} , t[10001] = {0} , biao[10001] = {0} ; 

scanf( "%d %d" , &s , &n ) ; 

for( i = 1 ; i <= n ; i++ ) {

scanf( "%d %d" , &b[i] , &t[i] ) ; 

biao[b[i]]++ ; 

}

dp[s+1] = 0 ; 

for( i = s ; i >= 1 ; i-- ) {

if( biao[i] == 0 ) {

dp[i] = dp[i+1] + 1 ; 

}

else {

for( j = 1 ; j <= n ; j++ ) {

if( i == b[j] ) {

dp[i] = max( dp[i+t[j]] , dp[i] ) ; 

}

}

}

}

printf( "%d" , dp[1] ) ; 

return 0 ; 

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论