cf4b

来源:互联网 发布:php ture还是true 编辑:程序博客网 时间:2024/06/05 09:34

题目链接:http://www.codeforces.com/problemset/problem/4/B

思路:一开始我看数据也不大,然后就dfs暴搜了一下,orz.....,TLE,然后看了别人的贪心策略,佩服得五体投地啊!!!可以先把Min,Max求出来,然后从第一个MAX[i]开始减,边界条件为MAX[i]>MIN[i]&&r>sum;

View Code
 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int MIN[33]; 6 int MAX[33]; 7  8 int main(){ 9     int n,sum;10     while(~scanf("%d%d",&n,&sum)){11         int l=0,r=0;12         for(int i=1;i<=n;i++){13             scanf("%d%d",&MIN[i],&MAX[i]);14             l+=MIN[i];15             r+=MAX[i];16         }17         if(l<=sum&&sum<=r){18             for(int i=1;i<=n;i++){19                 //这样的话,前面几个都是尽量接近MIN[i];20                 while(MAX[i]>MIN[i]&&r>sum){21                     MAX[i]--;r--;22                 }23             }24             puts("YES");25             for(int i=1;i<n;i++){26                 printf("%d ",MAX[i]);27             }28             printf("%d",MAX[n]);29         }else 30             puts("NO");31     }32     return 0;33 }34 35 36 37         38         

 

0 0
原创粉丝点击