potion

157 - 第14届浙江大学编程竞赛
/*
数据中段 想要的 3 3 1
已拥有的 1 2 5
1和5 是最高级 3和2 是第二级 3和1 是最低级
根据提示信息 高级的能变成低级的 已拥有的5个高级可以变成5个中级或5个低级 这里就是 5个高级变成1个高级 1个中级 3个低级 从而满足要求;
解决这道题目 首先要比较最高级的大小 如果拥有的大于想要的 就把高级的差值交给下一级 反之 不满足 输出 No 以此类推解决。

*/

#include <iostream>
using namespace std;
int main()
{
	int t,i;
	cin>>t;
	while(t--)
	{
		int n,a[101],b[101];
		long long c[101];//不这样内存不够
		int count=0,ret=1;
		cin>>n;
		for(i=0;i<n;i++)
		{
			cin>>a[i];
		}
		for(i=0;i<n;i++)
		{
			cin>>b[i];
		}
		for(i=0;i<n;i++)
		{
			c[i]=b[i]-a[i];
		}

  		for(i=n-1;i>=0;i--)
		{
   			if(c[i]<0)
   			{
				ret=0;
				break;
   			}
   			if(c[i]>0)
			{
				c[i-1]+=c[i];
			}
		}
		if(ret==0)
		{
			cout<<"No"<<endl;
		}
		else
		{
			cout<<"Yes"<<endl;
		}
	}
	return 0;
}