1. 程式人生 > >校賽 倒咖啡 擴充套件歐幾里得

校賽 倒咖啡 擴充套件歐幾里得

開始用完全揹包寫,過不去,不知道思路錯在哪兒了;

擴充套件歐幾里德定理

  對於不完全為 0 的非負整數 a,b,gcd(a,b)表示 a,b 的最大公約數,必然存在整   數對 x,y ,使得 gcd(a,b)=ax+by。

使用擴充套件歐幾里德演算法解決不定方程的辦法

  對於不定整數方程pa+qb=c,若 c mod Gcd(a, b)=0,則該方程存在整數解,否則不存在整數解。

倒咖啡

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 21   Accepted Submission(s) : 9

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

有一個足夠大的杯子C,沒有標明刻度。現有兩隻杯子A, B,也沒有標明刻度,不過我們知道A, B的容量分別為是VA, VB。
請問是否可以使用A, B兩個杯子,用盡你可以想到的方法恰好將C中倒入容量為V的咖啡。 

Input

Output

如果可以,輸出"YES",否則輸出"NO"

Sample Input

15 3 20
5 4 4

Sample Output

YES
NO
#include <iostream>
using namespace std;

int gcd(int x, int y){return (y == 0)?x:gcd(y,x%y);}
int main()
{
	int V,VA,VB;
	while(cin>>V>>VA>>VB)
	{
		if(V%gcd(VA,VB)==0)
		cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	
}

但是用完全揹包的過不了,想知道哪裡錯啦,哪位大神幫忙找找;
我的思路是:物品有4種,價值為VA的,VB的,VA-VB的,還有就是min(VA,VB) -  max(VA,VB)%min(VA,VB);
比如VA = 3;VB = 20;
物品就有:3  30  17  1
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int f[1003],V = 1001;
int CompletePack(int cost, int worth)
{
	for(int j = cost; j <= V; j++)
	{
		f[j] = max(f[j], f[j-cost]+worth);
	}
} 

int main()
{
	int V1,VA,VB,a[5];
	while(scanf("%d%d%d",&V1,&VA,&VB)!=EOF)
	{
		a[1] = VA;
		a[2] = VB;
		a[3] = abs(VA-VB);
		a[4] =min(VA,VB) -  max(VA,VB)%min(VA,VB);
		memset(f,0,sizeof(f));
		for(int i = 1; i <= 4;i++)
			CompletePack(a[i],a[i]);
		
		if(f[V1] == V1)
		cout<<"YES"<<endl;
		else
		cout<<"NO"<<endl;
	}
}


相關推薦

咖啡 擴充套件

開始用完全揹包寫,過不去,不知道思路錯在哪兒了; 擴充套件歐幾里德定理   對於不完全為 0 的非負整數 a,b,gcd(a,b)表示 a,b 的最大公約數,必然存在整   數對 x,y ,使得 gcd(a,b)=ax+by。 使用擴充套件歐幾里德演算法解決不定

HDU 5114 2014ICPC北京現場 C - Collision (擴充套件)

題目連結 在n*m的方格的兩個整數點處發射初速度都為(1, 1)的質點,質點在邊界會發生彈性碰撞,問兩質點能否相遇。若能,求出二者第一次相遇的座標。 首先為了避免小數的出現,將座標全部擴大為原來的兩倍。 這種碰撞問題顯然需要將速度正交分解,然後有四種情況: (1)x1==x2&

+擴充套件

歐幾里得演算法 歐幾里德演算法又稱輾轉相除法,用於計算兩個正整數a,b的最大公約數(gcd)。 其計算原理依賴於下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不為0) 證明:a可以表示成a = kb + r,則r = a

51Nod 1256 乘法逆元 擴充套件

1256 乘法逆元 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關注 給出2個數M和N(M < N),且M與N互質,找出一個數K滿足0 < K < N且K * M % N = 1,如果有多個滿足條件的,輸出最小的。

擴充套件及中國剩餘定理

Exgcd 擴充套件歐幾里得 void exgcd(int a,int b,int &x,int &y){ if(!b){x=1,y=0;return;} exgcd(b,a%b,x,y);b-=y*(a/b); } 對於 \(gcd(a,b)=g\) ,\(a\time

sincerit 2669 Romantic 擴充套件

2669 Romantic Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10370 Accepted Submission(s):

sincerit 1576 A/B 擴充套件

1576 A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9629 Accepted Submission(s): 7732

Savage(擴充套件)

Savage Input 第1行為一個整數N(1<=N<=15),即野人的數目。 第2行到第N+1每行為三個整數Ci, Pi, Li表示每個野人所住的初始洞穴編號,每年走過的洞穴數及壽命值。 (1<=Ci,Pi<=100, 0<=Li<=1

UVA - 12169 -擴充套件演算法

#include<iostream> #include<string.h> #include<algorithm> #include<stdio.h> #define ll long long #define rep(i,j,k) for(int i=j;

51Nod 1119 機器人走方格 (擴充套件+逆元+求組合數)

M * N的方格,一個機器人從左上走到右下,只能向右或向下走。有多少種不同的走法?由於方法數量可能很大,只需要輸出Mod 10^9 + 7的結果。 收起 輸入 第1行,2個數M,N,中間用空格隔開。(2 <= m,n <= 1000000) 輸出 輸出走法的數量 Mo

擴充套件【HDU1356】

傳送門:http://acm.hdu.edu.cn/showproblem.php?pid=1356 說實話,我第一眼沒看出來是個exgcd(劃掉)。 擴充套件歐幾里得,這裡就不證明了。 這次我想說的是怎麼求不定方程得通解(這是七年級的題目,我怎麼不記得我初一的時候學過不定方程?!)

演算法複習——擴充套件演算法(擴充套件,逆元,整除)

①歐幾里得演算法 就是求gcd的有趣的輾轉相除法,不再贅述啦0v0 程式碼: int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } ②擴充套件歐幾里得演算法 需要解決這樣的問題:兩個非0整數a,b

實驗二 擴充套件演算法c++程式碼

#include<iostream> #include<stdio.h> using namespace std; int x,y,q; void extend_Eulid(int a,int b) { if(b==0) { x=1; y=0; q=a; }

擴充套件演算法】輾轉相除法

其計算原理依賴於下面的定理: 定理:兩個整數的最大公約數等於其中較小的那個數和兩數相除餘數的最大公約數。最大公約數(Greatest Common Divisor)縮寫為GCD。 /* 歐幾里德演算法:輾轉求餘 原理: gcd(a,b)=gcd(b,a mod b) 當b為0時,兩數的最

擴充套件演算法+獲取特殊的解

通過擴充套件歐幾里得演算法獲取x或者y的最小整數解 template<class T> void exgcd(T a,T b,T &d,T &x,T &y){ if(!b) {d=a;x=1;y=0;} else {exgcd(b,a%b,d,y,x

qdu 2017級納新題(擴充套件

在你面前撒個嬌 哎呦喵喵喵喵喵 Description   我們一起學貓叫 一起喵喵喵喵喵 在你面前撒個嬌 哎呦喵喵喵喵喵 我的心臟砰砰跳 迷戀上你的壞笑 你不說愛我我就喵喵喵 每當xjy和hqy一起唱起這首歌時,就會吸引好多貓群來聽歌,這天他們又吸

POJ-1061-青蛙的約會 (擴充套件演算法)

原題連結: http://poj.org/problem?id=1061 兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面為止。可是它們出發之前忘記了一件很重要的事情,既沒有問清楚對方的特徵,也沒有約定

數論-模運算,擴充套件

一:模運算 1:餘數:a對b取模的結果就是a除以b的餘數,記作a%b。例如24%5 == 4 2:性質: \[ (a+b)\%p=(a\%p+b\%p)\%p \] \[ (a-b)\%p=(a\%p-b\%p+p)\%p \] \[ (a*b)\%p=(a\%p)*(b\%p)\%p \] 二:

POJ1061(擴充套件+同餘演算法)

青蛙的約會 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 129229 Accepted: 28286 Description 兩隻青蛙在網上相識了,它們聊得很開心

HDU-2669-Romantic (擴充套件演算法)

原題連結: http://acm.hdu.edu.cn/showproblem.php?pid=2669 The Sky is Sprite. The Birds is Fly in the Sky. The Wind is Wonderful. Blew Throw the Trees