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