首页 > 其他分享 >CodeForces 4B Before an Exam(DP)

CodeForces 4B Before an Exam(DP)

时间:2023-06-12 14:37:38浏览次数:35  
标签:sumtime Exam 彼得 int 31 样例 CodeForces include 4B


思路:令dp[i][j]为做了i天用了j时间,然后随便转移一下就可以了



#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
using namespace std;
#define maxn 100000
#define LL long long
int cas=1,T;
int dp[31][250];
int p[31][250];
int l[31],r[31];
void solve(int x,int y)
{
	if (x!=1)
		solve(x-1,p[x][y]);
	printf("%d ",y-p[x][y]);
}
int main()
{
	int d,sumtime;
	while (scanf("%d%d",&d,&sumtime)!=EOF)
	{
		int maxt=0;
		int mint=0;
        for (int i = 1;i<=d;i++)
		{
			scanf("%d%d",&l[i],&r[i]);
			maxt+=r[i];
			mint+=l[i];
		}
        if (maxt<sumtime || mint>sumtime)
		{
			puts("NO");
			continue;
		}
		dp[0][0]=1;
		for (int i = 1;i<=d;i++)
		{
			for (int j = 0;j<=240;j++)
			{
				if (dp[i-1][j])
				  for (int k = l[i];k<=r[i];k++)
				  {
                      dp[i][j+k]=1;
					  p[i][j+k]=j;
				  }
			}

		}
		if (dp[d][sumtime])
		{	
			puts("YES");
			solve(d,sumtime);
		}
		else
			puts("NO");
	}
	//freopen("in","r",stdin);
	//scanf("%d",&T);
	//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
	return 0;
}




Description



   明天,彼得就将要参加生物考试了。但是他不喜欢这个科目,但是d天前,彼得严厉的父母让他立即准备考试,为此,在第i天的时候,他要学习不少于minTimei的时间,并且不多于maxTimei的时间。此外,他父母警告彼得说考试前一天,他们会检查他是否按照他们的指示在复习。



 



   今天,彼得的父母来检查了,要求他出示每天复习的时间表。但是彼得只记得花的总时间sumtime了,现在为了应付父母的检查,请你帮助他创造一张每天学习的时间表,使得满足每天学习时间的要求,并且总时间等于sumtime。



Input



第一行输入包含两个整数d和sumtime(1≤d≤30,0≤sumtime≤240)分别表示复习的总天数和总时间。以下d行包含两个整数minTimei和maxTimei(0≤minTimei≤maxTimei≤8),用空格隔开,表示每天复习的最少时间和最多时间。 



Output



如果没有解决方案,就输出NO,如果有解决方案,就先第一行输出YES,然后第二行输出每天学习的时间,中间用一个空格隔开(输出任何一个解决方法都可以)。



Sample Input



输入样例1:



1 48



5 7



 



输入样例2:



2 5



0 1



3 5



Sample Output



输出样例1:



NO



 



输出样例2:



YES



1 4 






标签:sumtime,Exam,彼得,int,31,样例,CodeForces,include,4B
From: https://blog.51cto.com/u_16156555/6462531

相关文章

  • CodeForces 4D Mysterious Present(DP)
    题意:你有一张长宽为x,y的卡片同时有n个盒子,长宽分别为xi,yi。然后问你卡片最多塞多少层盒子并且把这些盒子按照从里到外输出。思路:由于数据给小了,所以n^2的DP也是可以水过的~#include<iostream>#include<cstdio>usingnamespacestd;constintmaxn=5005;intx[maxn],y[maxn]......
  • CodeForces 645A Amity Assessment
    题意:给你一个2X2的华容道你,问能不能通过初始给出的棋盘然后变换到最后的棋盘思路:由于是一个2X2的...所以怎么做都可以..留意到每个棋子的移动其实都是顺时针或者逆时针的就好做了。#include<cstdio>#include<queue>#include<cstring>#include<iostream>#include<cstdlib>......
  • Codeforces Round 877 (Div. 2)
    Preface补题这场补题的时候直接成腐乳了,A题挂两发,B题挂两发,C题挂一发是真的抽象虽然D是个套路题看一眼就秒了,但如果真的比赛时候打真要罚时爆炸了的说后面的EF还是做不来啊岂可修,不过都很有启发性让人感觉神清气爽,不像傻逼蓝桥杯花钱买罪受A.BlackboardList刚开始想错方......
  • Codeforces Round 876 Div2 A-D题解
    CodeforcesRound876Div2A-D题解A.TheGoodArray这个题就是问你对于\(i\leqn\),要求前面后面至少\(ceil(\frac{i}{k})\)个1那我们就贪心的每k个放一个1,或者直接用数学算一下就好了AC代码#include<bits/stdc++.h>usingnamespacestd;constexprintlimit=(......
  • [Codeforces Round 876 (Div. 2)][Codeforces 1839D. Ball Sorting]
    题目链接:D-BallSorting题目大意:需要对一个排列按照指定操作进行排序。操作一:在数字间插入一个特殊点,可执行不超过\(k\)次;操作二:将在特殊点旁的数移动到任意位置。所有操作结束后特殊点会消失,要求对所有\(k\in[1,n]\),求出操作二的最少操作次数。分析题意可以得出,操作一放......
  • Codeforces 1188D Make Equal
    设最终所有数变为的值为\(u\),\(\operatorname{bitcount}(x)\)为\(x\)二进制上为\(1\)的位数,由题可得答案即为\(\sum\limits_{i=1}^n\operatorname{bitcount}(u-a_i)\)。此时让\(a_i\)从小到大排序,答案即为\(\sum\limits_{i=1}^n\operatorname{bitcount}(u-a_......
  • Codeforces 1626 C
    1626C题意抽象出题意:给出n个区间的结尾以及它的区间长度,然后每一段连续区间的贡献为\(\sum_{i=1}^{len}i\),求总贡献。思路处理出每个区间的开头结尾,排序后处理每个连续区间就行了。代码voidsolve(){ cin>>n; for(inti=1;i<=n;i++)cin>>p[i].second; for(inti=1,......
  • Codeforces 1514 C
    1514C题意给出一个数n,求[1,2,3...n-1]的某个最长子序列,这个子序列的元素乘积模n余1。思路这是个思维题,一个数学公式\[x\equiv1(modn)\rightarrowkx\equivk(mod kn)\]所以子序列中的元素与\(n\)互质,累乘结果模\(n\)后如果不是1,那么将序列中等于结果的元素去......
  • Codeforces 1515 B
    1515B题意有n只袜子(n为偶数),但左袜子有L只,右袜子有R只,每只袜子的颜色为\(C_i\),可以进行以下操作:换袜子的方向、或者将袜子变色,问进行多少次操作后变成(n/2)对袜子思路很曲折,想了很久后终于想清楚,排除配对的袜子后,对于某类袜子\(i\),剩下\(c\geq2\)(假设剩下的是右边)只,它的配对......
  • CodeForces - 658A Bear and Reverse Radewoosh (模拟)水
    TimeLimit: 2000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-658ABearandReverseRadewooshSubmit StatusDescriptionLimakandRadewoosharegoingtocompeteagainsteachotherintheupcomingalgorithmiccontest.Theyareequ......