Letersin


私信TA

用户名:dotcpp0606895

访问量:97

签 名:

等  级
排  名 26695
经  验 571
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 佛山大学
专  业

  自我简介:

TA的其他文章

C 常规实现
浏览:66

解题思路: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分

1 人评分

  评论区

  • «
  • »